grep
1.作用
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
2.grep支持的正则表达式元字符
主要有:
^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) 标记匹配字符,如'\(love\)',love被标记为1。
\ <锚定单词的开始,如:'\匹配包含以grep开头的单词的行。
\> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} 重复字符x,m次,如:'0\{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],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然 后是p。
\W 不匹配文字和数字字符
\b 单词锁定符,如: '\bgrep\b'只匹配grep
3.egrep支持的正则表达式的元字符
主要有:
? , + , {} , | , ()
这里的意思就不多加解释了,可以参考上面;
4.grep和egrep的联系和区别
1.grep -E = egrep
2.egrep中的元字符都可以在grep中用\来使用,即:
\? \+ \{\} \| \(\)
3.egrep中可以使用grep中的元字符,但\<和\>得看操作体统的类型;
4.个人建议不要用egrep,在特殊情况下用\来应用其正则表达式的元字符就可以了
5.grep的选项(egrep和其选项相同)
-# grep -2 'pattern file 列出匹配行的上下两行
-A NUM,--after-context=NUM
除了列出符合行之外,并且列出后NUM行。
-B NUM,--before-context=NUM
与 -A NUM 相对,但这此参数是显示除符合行之外
并显示在它之前的NUM行
-C [NUM], -NUM, --context[=NUM]
列出符合行之外并列出上下各NUM行,默认值是2
-V, --version
显示出grep的版本号到标准错误。
当您在回报有关grep的bugs时,grep版本号是必须要包含在内的。
-b, --byte-offset
列出样式之前的内文总共有多少byte ..
--binary-files=TYPE
此参数TYPE预设为binary(二进制),若以普通方式搜寻,只有2种结果:
1.若有符合的地方:显示Binary file 二进制文件名 matches
2.若没有符合的地方:什么都没有显示。
-c, --count
不显示符合样式行,只显示符合的总行数。
若再加上-v,--invert-match
,参数显示不符合的总行数。
-d ACTION, --directories=ACTION
若输入的档案是一个资料夹,使用ACTION去处理这个资料夹。
预设ACTION是read(读取),也就是说此资料夹会被视为一般的档案;
若ACTION是skip(略过),资料夹会被grep略过:
若ACTION是recurse(递归),grep会去读取资料夹下所有的档案,
此相当于-r 参数。
-E, --extended-regexp
采用规则表示式去解释样式。
-e PATTERN, --regexp=PATTERN
把样式做为一个partern,通常用在避免partern用-开始。
-F grep -F =fgrep
屏蔽所有的元字符,将其都作为普通字符
-f FILE, --file=FILE
事先将要搜寻的样式写入到一个档案,一行一个样式。
然后采用档案搜寻。
空的档案表示没有要搜寻的样式,因此也就不会有任何符合。
-G, --basic-regexp
将样式视为基本的规则表示式解释。(此为预设)
-H, --with-filename
在每个符合样式行前加上符合的文件名称,若有路径会显示路径
-h, --no-filename
与-H参数相类似,但在输出时不显示路径。
-I
grep会强制认为此二进制档案没有包含任何搜寻样式,
与--binary-files=without-match
参数相同。
-i, --ignore-case
忽略大小写,包含要搜寻的样式及被搜寻的档案。
-L, --files-without-match
不显示平常一般的输出结果,反而显示出没有符合的文件名称。
-l, --files-with-matches
不显示平常一般的输出结果,只显示符合的文件名称。
--mmap
如果可能,使用mmap系统呼叫去读取输入,而不是预设的read系统呼叫。
在某些状况,--mmap 能产生较好的效能。 然而,--mmap
如果运作中档案缩短,或I/O 错误发生时,
可能造成未定义的行为(包含core dump),。
-n, --line-number
在显示行前,标上行号。
-q, --quiet, --silent
不显示任何的一般输出。请参阅-s或--no-messages
-r, --recursive
递归地,读取每个资料夹下的所有档案,此相当于 -d recsuse 参数。
-s, --no-messages
不显示关于不存在或无法读取的错误讯息。。
-V, --version
显示出grep的版本号到标准错误。
当您在回报有关grep的bugs时,grep版本号是必须要包含在内的。
-v, --invert-match
显示除搜寻样式行之外的全部。
-w, --word-regexp
将搜寻样式视为一个字去搜寻,完全符合该"字"的行才会被列出。
-x, --line-regexp
将搜寻样式视为一行去搜寻,完全符合该"行"的行才会被列出。
6.实用grep和egrep举例:
选项类:
grep -l 'dd' * -l 选项,只打印匹配项的文件名
grep -c 'tao' file 只打印匹配的行总数
grep -w 'tao' file 匹配有tao这个单词的行
grep -i 'TAO’ file 忽略大小写
grep -C 'tao' file 将匹配行的前后两行也打印
grep -e '-tao' file 当匹配项有-时候使用-e选项。用\也可以的,但用-F也是不行的
可以用grep --regexp=-tao file也可以 或者 ’\-tao‘
grep -x -e '-tao shou kun' file 匹配整行
grep -f file1 file 用file1中的模式来匹配
grep -F ’\\\ddd****$$$$‘ file 此时的元字符都作为字符看待
grep -H 还有grep -h
grep -L 和 grep -l 这都是相反的意思
正则表达式类:
grep '[a-z]\{9\}' file
grep ' ^[^a-z]' file
grep ' \(3\)\.[0-9].*\1 *\1' file 匹配 例如: 3.4ee3 3
grep ' \ egrep 'NW|EA' file =grep -E 'NW|EA' file
=grep 'NW\|WA' file
egrep '3+' file =grep -E '3+' file
=grep '3\+' file
egrep '2\.?[0-9] ' file =grep '2\.\?[0-9]' file
egrep '(no)+' file =grep '\(no\)\+' file \
---------2010 11 18
阅读(1355) | 评论(1) | 转发(0) |