概述
转自http://blog.chinaunix.net/uid-7374279-id-3849705.html
一、grep家族简介
1、Unix的grep家族包括:grep、egrep和fgrep
1)grep
(1)grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出
(2)grep的工作方式:它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用(双引号或者单引号),模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容
(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就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊
二、grep正则表达式元字符集(基本集)
^
匹配行首,例如:’^grep’匹配所有以grep开头的行
$
匹配行尾,例如:’grep$’匹配所有以grep结尾的行
.
匹配一个非换行符的字符,例如:’gr.p’匹配gr后接一个任意字符,然后是p
*
匹配零个或多个先前字符,例如:’*grep’匹配所有一个或多个空格后紧跟grep的行;.*一起用代表任意字符
[ ]
匹配一个指定范围内的字符,例如:’[Gg]rep’匹配Grep和grep
[^ ]
匹配一个不在指定范围内的字符,例如:’[^A-FH-Z]rep’匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行
(..)
标记匹配字符,例如:’(love)’,love被标记为1
<
匹配单词的开始,例如:’
>
匹配单词的结束,例如:’grep>‘匹配包含以grep结尾的单词的行
x{m}
重复字符x,m次,例如:’o{5}’匹配包含5个o的行
x{m,}
重复字符x,至少m次,例如:’o{5,}’匹配至少有5个o的行
x{m,n}
重复字符x,至少m次,不多于n次,例如:’o{5,10}’匹配5–10个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的串:loveable,enable,disable等
?
匹配零个或多个先前的字符,例如:’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]'
note: 遇到过 egrep "[[:blank:]]AM[[:blank:]]|[[:blank:]]DI[[:blank:]]"
[: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
六、grep、fgrep、egrep实例
1、实例中用到的文件:todo、animal1、animal2
最后
以上就是瘦瘦眼神为你收集整理的grep、egrep、fgrep的全部内容,希望文章能够帮你解决grep、egrep、fgrep所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复