grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多;
sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed;
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep可用于shell脚本
,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
grep:根据模式搜索文本,并将符合模式的文本行显示出来。
Pattern:文本字符和正则表达式的元字符组合而成匹配条件
使用格式:
grep [options] PATTERN[FILE...]
-i:忽略大小写
--color:匹配到字符用其他颜色显示出来,默认是红色
-v:显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串,不显示行
-E:使用扩展正则表达式
-A n:表示显示该行及其后n行
-B n:表示显示该行及其前n行
-C n:表示显示该行及其前后各n行
正则表达式:REGular EXPression,REGEXP
grep:根据模式搜索文本,并将符合模式的文本行显示出来。
Pattern:文本字符和正则表达式的元字符组合而成匹配条件
使用格式:
grep [options] PATTERN[FILE...]
-i:忽略大小写
--color:匹配到字符用其他颜色显示出来,默认是红色
-v:显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串,不显示行
-E:使用扩展正则表达式
-A n:表示显示该行及其后n行
-B n:表示显示该行及其前n行
-C n:表示显示该行及其前后各n行
正则表达式:REGular EXPression,REGEXP
匹配次数(贪婪模式,即尽可能长的匹配):
*:匹配其前面的字符任意次
如:编辑文件abc,输入这些字符:a,b,ab,aab,acb,adb,amnb,使用grep匹配a*b,命令及显示效果如下所示:
*:匹配其前面的字符任意次
如:编辑文件abc,输入这些字符:a,b,ab,aab,acb,adb,amnb,使用grep匹配a*b,命令及显示效果如下所示:
从上图可以看到,虽然像acb、adb之类的字符串也可以显示出来,但从显示的颜色可以看到,匹配的仅仅是字符b,虽然整个字符串中也有字符a,但是此时a并没有与b一起紧挨着出现,所以仅匹配到字符b;而像ab、aab等字符串,全部显示,此时a紧挨着b出现,符合条件,所以可以显示。
.*:任意长度的任意字符
.*:任意长度的任意字符
如:匹配 .b 和 .*b ,看二者有什么区别,命
令和显示效果如下:
sed
是
Unix
常见的
命令行
程序。sed 用来把文档或
字符串里面的文字经过一系列编辑命令转换为另一种格式输出。sed 通常用来匹配一个或多个正则表达式的文本进行处理。
sed是一种在线
编辑器
,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向
存储
输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
使用格式:
sed 'Address Command' file ...
-n:静默模式,不再显示模式空间中的内容
-i:直接修改原文件
-e SCRIPT -e SCRIPT:添加脚本到将要执行的命令中,可以同时执行多个脚本
-f /PATH/TO/SED_SCORIPT:添加脚本文件中的内容到将要执行的命令中
#sed -f /path/to/script file
-r:表示使用扩展正则表达式
Address:
sed 'Address Command' file ...
-n:静默模式,不再显示模式空间中的内容
-i:直接修改原文件
-e SCRIPT -e SCRIPT:添加脚本到将要执行的命令中,可以同时执行多个脚本
-f /PATH/TO/SED_SCORIPT:添加脚本文件中的内容到将要执行的命令中
#sed -f /path/to/script file
-r:表示使用扩展正则表达式
Address:
1、StartLine,EndLine:开始行,结束行如:1,100:表示从第1行到第100行$;最后一行2、/RegExp/:扩展正则表达式如:/^root/3、/pattern1/,/pattern2/:表示第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行4、LIneNumber:指定的行5、StartLIne,+N:从StartLine开始,向后的N行
Command:
d:删除符合条件的行;
p:显示符合条件的行,在不使用-n选项时被匹配到的行会显示两遍,因为sed处理时会把处理的信息输出
a \string:在指定的行后面追加新行,内容为“string”,
显示两行或多行,在每行后加\n进行换行
i \string:在指定的行前面添加新行,内容为string
r file:将指定的文件的内容添加至符合条件的文件中
w file:将地址指定范围内的行另存至指定的文件中
s /pattern/string/修饰符:查找并替换,默认只替换每行中第一次被
模式匹配到的字符串加修饰符
g:全局替换,如:s /pattern/string/g
i:忽略字符大小写,如:s /pattern/string/i
s ///,s###,s@@@都可以,当所使用的分割符号与内容中显示的相同时,需使用转义字符转义
\(\),\1,\2:成组匹配,\1表示匹配第一个‘(’,\2表示匹配第二个‘(’
&:引用模式匹配到的整个串
----------------------------------------------------------------
awk
是一种优良的
文本处理
工具,
Linux
及
Unix
环境中现有的功能最强大的
数据处理
引擎之一。
AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上AWK的确拥有自己的语言:AWK
程序设计语言
,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
最简单地说,AWK是一种用于处理文本的编程语言工具。
使用格式:
# awk [options] 'script' file1, file2, ...# awk [options] 'PATTERN { action }' file1, file2, ...
awk的输出:
print和printf
print的使用格式:
print item1, item2, ...
要点:
1、各项目之间使用 逗号隔开,而 输出时则以空白字符分隔;2、输出的item可以为 字符串或数值 、 当前记录的字段(如$1) 、 变量或awk的表达式 ;数值会先转换为字符串,而后再输出;3、print命令后面的item可以省略,此时其功能相当于print $0, 因此,如果想输出空白行,则需要使用print " ";
2.1 awk内置变量之记录变量:FS: field separator,字段分隔符,默认是空白字符;RS: Record separator,记录分隔符,默认是换行符;OFS: Output Filed Separator,输出字段分隔符ORS:Output Row Separator,输出行分隔符
NR: The number of input records,awk命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中行统一计数;NF:Number of Field,当前记录的字段个数,有时可用来表示最后一个字段FNR: 与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数;ARGV: 数组,保存命令行本身这个字符串,如awk '{print $0}' a.txt b.txt这个命令中,ARGV[0]保存awk,ARGV[1]保存a.txt;ARGC: awk命令的参数的个数;FILENAME: awk命令所处理的文件的名称;ENVIRON:当前shell环境变量及其值的关联数组;
如:
awk 'BEGIN{print ENVIRON["PATH"]}'awk '{print $NF}' test.txt
printf命令的使用格式:printf format, item1, item2, ...
要点:
1、其与print命令的最大不同是,printf需要指定格式;2、format用于指定后面的每个item的输出格式;3、printf语句不会自动打印换行,需要显式使用\n换行。
format格式的指示符都以%开头,后跟一个字符;如下:
%c: 显示字符的ASCII码;%d, %i:十进制整数;%e, %E:科学计数法显示数值;%f: 显示浮点数;%g, %G: 以科学计数法的格式或浮点数的格式显示数值;%s: 显示字符串;%u: 无符号整数;%%: 显示%自身;