- 浏览: 2148366 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
1,我们先来熟悉下正则表达式一些字符含义的基础
^行起始标记
$行尾标记
.匹配任意一个字符
[]匹配包含在[]之中的任意一个字符
[^]匹配除[^字符]之外的任意一个字符 9[^01],可以匹配92,93不会匹配90,91
[-]匹配指定范围内的字符,[1-8]匹配1-8之内的任意一个字符
?匹配0次或1次
+匹配1次或多次
*匹配0次或多次
()创建一个匹配的字串
{n}匹配n次
{n,}至少n次
{n,m}n和m之间
|或关系的匹配 ba(r|t)可以匹配bar和bat
\转义字符a\.b匹配a.b
2,grep命令用法:
grep pattern filename 单个文件
grep pattern file1 file2 file3 ... 多个文件
egrep "[a-z]+" file 扩展的正则
egrep -o "[a-z]" 只输出匹配部分
grep -v pattern file 匹配结果反转
grep -c patter file 匹配行数
递归搜索在多级目录里搜索文件:
grep "text" . -R -n
忽略大小写
grep -i "helloW"
匹配多个样式
grep -e "this" -e "key" -o
在搜索里排除,或指定文件
grep "main" . -r --include *.{c,cpp}
grep "main" . -r --exclude *.{c,cpp}
打印匹配之后的行:
匹配结果前2行
匹配结果前后2行
3,使用cut命令,cut命令是用来切分分文件的,很容易的按列切分
1,提取特定的字符 cut -f filed_list filename
例如: cut -f 2,3 filename
-d后面指定定界符
-f后面多个数字使用逗号隔开
其他用法:
N- 从第N个字节,字符或字段到行尾
N-M 从第N个字节到第M个字节
-M 从第一个字节到第M个字节
-b表示字节
-c表示字符
-f用于定义字段
打印前5个字符:
打印前2个字符:
提取多个字段输出:
4,使用sed命令
替换命令sed 's/pattern/replace/' file
替换原始文本 sed -i 's/pattern/replace/' file
替换所有目录sed -i 's/pattern/replace/g' file
移除空白行 sed '/^$/d' file
已匹配字符串标记,这个功能,做高亮最适用了:
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/\<bold\>&\<\/bold\>"/g'
i am a <bold>red</bold>" cat
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/"&"/g'
i am a "red" cat
[root@ganglia 916]#
多个表达式命令: sed -e "pattern1" -e "pattern2"
在shell里面向sed里,传变量
5,使用awk编程
基本语法: awk 'BEGIN {print "start"} pattern {commonds} END {print "end"} ' files
注意awk的脚本,也可以用双引号括住
如下例子:
awk "BEGIN {i=0} {i++} END {print i}" filename
需要记住两点,print打印的参数是逗号分割的,默认空格是定界符 双引号,会被当做拼接符号
NR 记录数量,相当于当前行号
NF 字段数量,执行过程中当前字段数
$0 原始内容
$n 第n列
打印行号,统计行数
读取一行使用getline
注意,这个例子,可以用来读取带表头的excel或者一些文本数据非常方便
awk的灵活的过滤条件
awk 'NR < 5' 行号小于5的行
awk 'NR==1,NR==4' 行号在1到5之间的行
awk '/linux/' 包含linux的行
awk '!/linux/' 不包含linux的行
设置字段定界符:
awk -F: '{ print $NF}' /etc/passwd
awk支持循环:
跟我们所学的C和JAVA还是JavaScrpit都非常接近
awk内置函数
length()字符串长度
index()返回出现位置
split()打散一个数组
substr()截取一个字符串
sub() 替换
match()匹配
6,按列合并多个文件
指定分割符:
截取指定范围字符
逆序输出tac
逆序输出awk
^行起始标记
$行尾标记
.匹配任意一个字符
[]匹配包含在[]之中的任意一个字符
[^]匹配除[^字符]之外的任意一个字符 9[^01],可以匹配92,93不会匹配90,91
[-]匹配指定范围内的字符,[1-8]匹配1-8之内的任意一个字符
?匹配0次或1次
+匹配1次或多次
*匹配0次或多次
()创建一个匹配的字串
{n}匹配n次
{n,}至少n次
{n,m}n和m之间
|或关系的匹配 ba(r|t)可以匹配bar和bat
\转义字符a\.b匹配a.b
2,grep命令用法:
grep pattern filename 单个文件
grep pattern file1 file2 file3 ... 多个文件
egrep "[a-z]+" file 扩展的正则
egrep -o "[a-z]" 只输出匹配部分
grep -v pattern file 匹配结果反转
grep -c patter file 匹配行数
递归搜索在多级目录里搜索文件:
grep "text" . -R -n
忽略大小写
grep -i "helloW"
匹配多个样式
grep -e "this" -e "key" -o
在搜索里排除,或指定文件
grep "main" . -r --include *.{c,cpp}
grep "main" . -r --exclude *.{c,cpp}
打印匹配之后的行:
[root@ganglia 916]# seq 10 | grep 5 -A 2 5 6 7 [root@ganglia 916]#
匹配结果前2行
[root@ganglia 916]# seq 10 | grep 5 -B 2 3 4 5 [root@ganglia 916]#
匹配结果前后2行
[root@ganglia 916]# seq 10 | grep 5 -C 2 3 4 5 6 7 [root@ganglia 916]#
3,使用cut命令,cut命令是用来切分分文件的,很容易的按列切分
1,提取特定的字符 cut -f filed_list filename
例如: cut -f 2,3 filename
[root@ganglia 916]# cut -f1 -d" " a.txt name zhang wang li [root@ganglia 916]#
-d后面指定定界符
-f后面多个数字使用逗号隔开
[root@ganglia 916]# cut -f1,3 -d" " a.txt name score zhang 100 wang 99 li 96 [root@ganglia 916]# cat a.txt name mark score zhang 20 100 wang 36 99 li 12 96 [root@ganglia 916]#
其他用法:
N- 从第N个字节,字符或字段到行尾
N-M 从第N个字节到第M个字节
-M 从第一个字节到第M个字节
-b表示字节
-c表示字符
-f用于定义字段
打印前5个字符:
[root@ganglia 916]# cat b.txt aafgdfdfdfdsfd dffdsfag12343r3 fdfdfdgfgfgf dfdgdtrasf zzzzzzzz ddfdfggdfdf [root@ganglia 916]# cut -c1-5 b.txt aafgd dffds fdfdf dfdgd zzzzz ddfdf [root@ganglia 916]#
打印前2个字符:
[root@ganglia 916]# cut b.txt -c -2 aa df fd df zz dd [root@ganglia 916]#
提取多个字段输出:
[root@ganglia 916]# cut b.txt -c1-3,4-6 --output-delimiter "====>" aaf====>gdf dff====>dsf fdf====>dfd dfd====>gdt zzz====>zzz ddf====>dfg [root@ganglia 916]#
4,使用sed命令
替换命令sed 's/pattern/replace/' file
替换原始文本 sed -i 's/pattern/replace/' file
替换所有目录sed -i 's/pattern/replace/g' file
移除空白行 sed '/^$/d' file
已匹配字符串标记,这个功能,做高亮最适用了:
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/\<bold\>&\<\/bold\>"/g'
i am a <bold>red</bold>" cat
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/"&"/g'
i am a "red" cat
[root@ganglia 916]#
多个表达式命令: sed -e "pattern1" -e "pattern2"
在shell里面向sed里,传变量
[root@ganglia 916]# text=hello [root@ganglia 916]# echo hello world | sed "s/$text/big/" big world [root@ganglia 916]#
5,使用awk编程
基本语法: awk 'BEGIN {print "start"} pattern {commonds} END {print "end"} ' files
注意awk的脚本,也可以用双引号括住
如下例子:
awk "BEGIN {i=0} {i++} END {print i}" filename
[root@ganglia 916]# echo -e "1\n2\n3" | gawk 'BEGIN {print "开始" } {print} END {print "结束"} ' 开始 1 2 3 结束 [root@ganglia 916]#
需要记住两点,print打印的参数是逗号分割的,默认空格是定界符 双引号,会被当做拼接符号
NR 记录数量,相当于当前行号
NF 字段数量,执行过程中当前字段数
$0 原始内容
$n 第n列
[root@ganglia 916]# cat a.txt name mark score zhang 20 100 wang 36 99 li 12 96 [root@ganglia 916]# gawk '{ print $1, $3}' a.txt name score zhang 100 wang 99 li 96 [root@ganglia 916]#
打印行号,统计行数
[root@ganglia 916]# gawk '{ print NR }' a.txt 1 2 3 4
读取一行使用getline
[root@ganglia 916]# seq 6 | gawk 'BEGIN {getline; print "第一行:" $0} {print $0}' 第一行:1 2 3 4 5 6 [root@ganglia 916]#
注意,这个例子,可以用来读取带表头的excel或者一些文本数据非常方便
awk的灵活的过滤条件
awk 'NR < 5' 行号小于5的行
awk 'NR==1,NR==4' 行号在1到5之间的行
awk '/linux/' 包含linux的行
awk '!/linux/' 不包含linux的行
设置字段定界符:
awk -F: '{ print $NF}' /etc/passwd
awk支持循环:
[root@ganglia 916]# gawk 'BEGIN{ for (i=0;i<=10;i++){ print i } }' 0 1 2 3 4 5 6 7 8 9 10 [root@ganglia 916]#
跟我们所学的C和JAVA还是JavaScrpit都非常接近
awk内置函数
length()字符串长度
index()返回出现位置
split()打散一个数组
substr()截取一个字符串
sub() 替换
match()匹配
6,按列合并多个文件
[root@ganglia 916]# cat c.txt 1 2 3 4 [root@ganglia 916]# cat d.txt a b c d e [root@ganglia 916]# pas passwd paste [root@ganglia 916]# pas passwd paste [root@ganglia 916]# paste c.txt d.txt 1 a 2 b 3 c 4 d e [root@ganglia 916]#
指定分割符:
[root@ganglia 916]# paste c.txt d.txt -d "," 1,a 2,b 3,c 4,d ,e [root@ganglia 916]#
截取指定范围字符
[root@ganglia 916]# seq 100 | gawk 'NR==4,NR==10' 4 5 6 7 8 9 10 [root@ganglia 916]#
逆序输出tac
[root@ganglia 916]# seq 5 | tac 5 4 3 2 1 [root@ganglia 916]#
逆序输出awk
[root@ganglia 916]# seq 5 | gawk '{ lifo[NR]=$0 } END{ for(lno=NR;lno>-1;lno--){print lifo[lno]} } ' 5 4 3 2 1 [root@ganglia 916]#
发表评论
-
备忘几个有用的shell脚本
2015-04-07 21:59 1460(1)在shell下,操作hadoop目录,批量命名或删除, ... -
shell脚本杂记(五)
2014-09-22 19:48 19851,找出多个文件所占用的磁盘空间 du f1 f2 [roo ... -
shell脚本杂记(四)
2014-09-19 20:03 16611,wget是一个用于文件 ... -
shell自动化部署批量建立用户和批量SSH配置
2014-09-18 18:29 3564在linux下面,shell脚本熟练使用,有时候可以帮助我们解 ... -
shell自动化部署神器expect
2014-09-17 21:08 4635Shell可以实现简单的控制流功能,如:循环、判断等。但是对于 ... -
shell脚本杂记(二)
2014-09-15 21:25 19811,求两个文件的交集comm a.txt b.txt -1 - ... -
shell脚本杂记(一)
2014-09-12 21:50 19911,登陆系统时,$代表 ... -
跟散仙学shell编程(十五)
2014-08-27 21:24 1793上篇文章,散仙简单介绍了,如何在Linux下以shell脚本的 ... -
跟散仙学shell编程(十四)
2014-08-26 20:59 1898上篇散仙简单介绍了linu ... -
跟散仙学shell编程(十三)
2014-08-25 20:02 1270上篇散仙主要了讲述了gawk进阶的一些用法,本篇我们来了解下载 ... -
跟散仙学shell编程(十二)
2014-08-22 21:27 1545上篇文章散仙写了关于sed进阶,本篇我们来看下在linux中另 ... -
跟散仙学shell编程(十一)
2014-08-21 21:45 1592上篇散仙写了关于shell里面正则的基础知识,本篇我们来特意学 ... -
跟散仙学shell编程(十)
2014-08-20 21:22 1285上篇文章,散仙简单介绍了在linux中,使用sed和gawk编 ... -
跟散仙学shell编程(九)
2014-08-19 21:49 1669上篇散仙说了如何在linux里面构建更好的交互式shell,本 ... -
跟散仙学shell编程(八)
2014-08-18 21:50 1593上篇散仙说了linux里面函数的使用,本篇我们来看下如何在sh ... -
跟散仙学shell编程(七)
2014-08-15 21:46 1763上篇散仙在文章里描述了如何处理linux信号和脚本控制,本节我 ... -
跟散仙学shell编程(六)
2014-08-14 21:53 2043上篇介绍了linux里面的处理数据的方式,本篇散仙来说下,如何 ... -
跟散仙学shell编程(五)
2014-08-13 21:41 1627上一篇写的是处理用户输入,本篇散仙要写的是linux里面的标准 ... -
跟散仙学shell编程(四)
2014-08-12 21:46 1493上篇介绍了for循环命令 ... -
跟散仙学shell编程(三)
2014-08-11 21:38 1703散仙在上一篇文章里写了关于如何使用if-else以及case等 ...
相关推荐
资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要...
shell 脚本shell 脚本shell 脚本shell 脚本shell 脚本shell 脚本shell 脚本shell 脚本shell 脚本shell 脚本shell 脚本
Linux_shell脚本全面学习 Linux_shell脚本全面学习
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用大量系统内部的功能来...
Shell脚本编程100例。 融汇 shell 脚本知识点,集大成之作。 本书实在是学习、进修、面试、居家旅行必备精品!
学习shell脚本,了解linux知识。
python编写shell脚本python编写shell脚本python编写shell脚本python编写shell脚本python编写shell脚本python编写shell脚本python编写shell脚本python编写shell脚本python编写shell脚本python编写shell脚本
Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...
109个shell脚本合集.pdf
shell脚本shell脚本shell脚本
Linux_Shell脚本攻略.第3版,高清电子版,作者Clif Flynt,Sarath Lakshman,Shantanu Tushar. 这本书的电子版也可以到http://readfree.me这个网站上下载。
Linux-shell脚本全面学习.pdf
需要提高cpu利用率的shell脚本
cat /mnt/log_function.sh #!/bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显示打印日志的时间...log_error打印shell脚本
参考shell脚本实例.rar参考shell脚本实例.ra参考shell脚本实例.rarr
主要介绍了IDEA中编写并运行shell脚本的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
第一次接触linux系统,之前写的数据导出不好使了。...找了好多资料,最后决定写个shell脚本;没接触过shell脚本,网上大部分例子都写的挺复杂的;贴个简单的,不带传参什么的;只是最简单的数据表的导出备份
shell脚本生成.txt数据文件,shell脚本生成.txt数据文件