转载: http://blog.chinaunix.net/uid-7374279-id-3849705.html
另一方面,组家族概述1,Unix组家族包括组、规格和fgrep1)
1)grep
)1) grep ) globalsearchregularexpression (re ) and print out the line (全面查找正则表达式并打印行)是一个强大的文本,可以使用正则表达式搜索文本并打印匹配的行
)2)正则表达式的工作原理)在一个或多个文件中搜索字符串模板。 如果模板包含空格,则必须用引号或单引号括起来。 模板后的所有字符串都被视为文件名。 搜索结果将被发送到屏幕,而不影响原始文件的内容
)3) linux是使用GNU版本的grep,并且可以使用-G (默认参数)、-E和-F命令行选项使用egrep和fgrep功能
grep -E=egrep
grep -F=fgrep
)4) grep可用于shell脚本。 grep通过返回状态值说明搜索的状态,因此如果模板搜索成功则返回0,如果搜索失败则返回1,如果搜索到的文件不存在则返回2。 因此,可以使用这些返回值执行自动化文本处理工作2)egrep
egrep命令与grep略有不同。 egrep是grep的扩展,包含更多re元字符3)fgrep
fgrep的指令与grep略有不同。 fgrep是固定组或快速组,将所有字符视为单词。 也就是说,正则表达式的元字符表示它本身的字面意思,不再是特殊的
二、正则表达式元字符集(基本集) )
^
匹配行的开头。 例如,“grep”匹配以grep开头的所有行
$
核对行尾。 例如,“grep”匹配以grep结尾的所有行
.
匹配换行以外的字符。 例如,“gr.p”匹配gr,后跟任何字符,后跟p
*
匹配0个以上的前一个字符。 例如,“grep”匹配一个或多个空格,并匹配紧接在grep之后的行。 *一起表示任意文字
[ ]
匹配指定范围内的字符。 例如,“[gg]rep”与Grep和Grep匹配
[^ ]
匹配指定范围外的字符。 例如,“[^a-FH-z]rep”匹配不包含A-F和H-Z的字符的开头,紧接在rep之后
(..)
标记匹配的字符。 例如,’ (love),love标记为1
匹配单词的开头。 例如,“grep”匹配包含以grep开头的单词的行
匹配单词的结尾。 例如,使包含以’grep ’grep结尾的单词的行一致
x{m}
把文字重复x、m次。 例如,’o{5 }’匹配包含五个o的行
x{m,}
至少重复m次字符x。 例如,’o{ 5, }’匹配至少有五个o的行
x{m,n}
至少重复m次字符x,n次以下。 例如,’o{ 5,10}’与510个o的行匹配
w
字符和数字的匹配,即[A-Za-z0-9],例如,’gw * p’匹配,以使g后跟零个或多个字符或数字,然后是p
W
与一个或多个非单词字符(如句点)匹配
b
单词边界符号,例如“bgrepb”,仅与grep匹配
B
单词的无界符号(例如,’ bok’)可以与grep单词不匹配,并且可以与book匹配
三. egrep和grep -E元字符集
+
如果匹配一个或多个上一个字符,例如“[a-z]able”,则匹配小写字母后面跟有able的字符串、可移动、启用、禁用等
?
以前的字符匹配0个以上。 例如,’gr?
p’,则匹配gr后跟一个或没有字符,然后是p的行a|b|c
匹配a或b或c,例如:(grep)|(sed),则匹配grep或sed
()
分组符号,如:love(able|rs)ov+,则匹配loveableov或loversov
x{m},x{m,},x{m,n} ó x{m},x{m,},x{m,n}
四、POSIX字符类
为了在不同国家的字符编码中保持一致,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
[:alnum:]
匹配任何一个字母或数字([A-Za-z0-9])
[:alpha:]
匹配任何一个字母([A-Za-z])
[:digit:]
匹配任何一个数字([0-9])
[:lower:]
匹配任何一个小写字母([a-z])
[:upper:]
匹配任何一个大写字母([A-Z])
[:space:]
任何一个空白字符:制表符、空格
[:blank:]
空格和制表符(横向和纵向),等价于'[stv]'
[:graph:]
任何一个可看得见且可打印的字符(注意:不包括空格和换行符等)
[:print:]
任何一个可以打印的字符(注意:不包括[:cntrl:], 但包括空格符号)
[:cntrl:]
任何一个控制字符(ASCII字符集中的前 32 个字符,即:用十进制
表示为从 0 到 31,例如:换行符、制表符等等)
[:punct:]
任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]字符集)
[:xdigit:]
任何一个十六进制数(即:0-9,a-f,A-F)
五、grep命令选项
grep [options] PATTERN [FILE...]
grep [options] [ -e PATTERN | -f FILE] [FILE... ]
-A num
num必须是正整体或0,即:同时显示匹配行向下的num行,例如:grep -A 3 ‘dog’ FILE同时显示匹配行的向下3行
-B num
num必须是正整体或0,即:同时显示匹配行向上的num行,例如:grep -B 3 ‘dog’ FILE同时显示匹配行的向上3行
-num
num必须是正整体或0,即:同时显示匹配行上下的num行,例如:grep -3 pattern filename同时显示匹配行的上下3行
--color=WHEN
--colour=WHEN
WHEN必须是:auto、always、never三个中的其中一个,表示搜索到的关健字以颜色方式显示
-r,-R,--recurse,-d recurse
如果FILE字段给的是一个目录,那么以递归的方式对该目录下的所有文件进行匹配搜索关健字(即:将遍历目录下的所有子目录中的文件);如果FILE字段给的是一个文件,那么就只对文件进行匹配搜索关健字
-E
即:使用egrep指令(作用:使用Extended Regular Expression)
-F
即:使用fgrep指令(作用:匹配搜索关健字时,将关健字中的元字符都按普通字符来匹配搜索,不使用Regular Expression)
-G
即:使用Basic Regular Expression
-P
即:使用Perl Regular Expression
-H
在匹配到的行的开头,追加上该行所在的文件的文件名(即:打印文件名)
-b,--byte-offset
显示匹配到的行之前的所有内容所占的字节大小(单位为bytes),例如:grep -b ‘dog’ filename,即:显示含有dog的行之前的那些行的内容所占的字节大小
-c,--count
只打印匹配的行数,不显示匹配的内容
-f File,--file=File
把模板(pattern)写在一个文件里,然后使用-f参数来读取这些pattern,如果文件中包含0个pattern,那么什么都不匹配;如果有多个pattern,那么必须一行写一个pattern,即:pattern一般是带有regular expression的表达式
-h,-- no-filename
当搜索多个文件时,不显示匹配文件名前缀
-i,--ignore-case
忽略大小写差别
-q,--quiet
取消显示,只返回退出状态;0则表示找到了匹配的行
-l,--files-with-matches
打印匹配pattern的文件清单,例如:grep –L 'bug' /etc/animal /etc/ruanxi /etc/grub.conf,那么如果只有/etc/animal文件中的内容匹配pattern('bug'),那么使用-l参数就只显示匹配的文件清单:/etc/animal
-L,--files-without-match
打印不匹配pattern的文件清单,例如:grep –L 'bug' /etc/animal /etc/ruanxi /etc/grub.conf,那么如果只有/etc/animal文件中的内容匹配pattern(即:'bug'),那么使用-L参数就显示不匹配的文件清单:/etc/ruanxi、/etc/grub.conf
-n,--line-number
在匹配的行前面显示行号
-s,--no-messages
不显示关于不存在或者无法读取文件的错误信息
-v,--revert-match
反检索,只显示不匹配的行
-w,--word-regexp
如果被<和>引用,就把表达式做为一个单词搜索
-o,--only-matching
显示满足匹配的字符串,例如下面这个例子
root@monitor:~# cat -n file
1 how are you today?
2 i don't know
3 what can i do for you?
4 nice to meet you
root@monitor:~# cat file | grep -n -o meet
4:meet