linux中grep命令的使用
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。
grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular expression Print,表示全局正则表达式版本,它的使用权限是所有用户。ps -ef | grep httpd :检查httpd进程是否存在
ps -aux |awk '$2~/32651/'过滤可以用ps -aux |awk '$2!~/32651/' grep 2567会显示出现2567这个字符串的所有行 ; | 这是一个管道,把输出的结果当作输入送给下一个命令。
awk和sed比grep强大多了,在讲unix的书上grep一般是略带提的,但awk和sed就会着重讲。
查找etc目录下含有字符串“wl0505”的文件:find /etc -name "*" |xargs grep "wl0505" > ~/thefile
grep -rn wl0505 /etc/*
find / -name "*.*" | xargs grep "wl0505" >>/home/filename*.*是文件名和扩展名,>>是把结果重定向到后面路径的文件中去,不在终端上显示了。
"*" 表示匹配带*这个字符的行* 表示 找出带有*的文件 并打印行 find http://www.jsgho.com/help/fwq/ -maxdepth 1 | grep "*"find http://www.jsgho.com/help/fwq/ -maxdepth 1 | grep *这两个命令才是等价的 对于 grep来讲 他只接受正则表达式匹配 * ? 这些字符需要加转义符
linux下的find与grep命令的功能不同。find 命令用于从目录树中查找与搜索条件匹配的文件;grep 命令用于查找输入流中包含模板文本的行。find 命令常结合grep命令使用, 以对搜索结果做进一步的筛选
匹配目录/cpl下所有(递归查找)以'#'开头的文件:
OCS101:~/cpl # grep -r '^#' .
http://www.jsgho.com/help/fwq/fk.c:#include
http://www.jsgho.com/help/fwq/fk.c:#include
http://www.jsgho.com/help/fwq/flower2.c:#include
http://www.jsgho.com/help/fwq/flower2.c:#include
http://www.jsgho.com/help/fwq/recursive_flower.c:#include
http://www.jsgho.com/help/fwq/recursive_flower.c:#include
http://www.jsgho.com/help/fwq/recursive_flower.c:#include
http://www.jsgho.com/help/fwq/recursive_flower.c:#define m 8
http://www.jsgho.com/help/fwq/flower.c:#include
http://www.jsgho.com/help/fwq/flower.c:#include
http://www.jsgho.com/help/fwq/flower.c:#include
http://www.jsgho.com/help/fwq/flower.c:#define N 1e8
匹配目录/cpl下所有(递归查找)以'}'结尾的文件:
OCS101:~/cpl # grep -r '^}' .
http://www.jsgho.com/help/fwq/fk.c:}
http://www.jsgho.com/help/fwq/fk.c:}
http://www.jsgho.com/help/fwq/fk.c:}
http://www.jsgho.com/help/fwq/Narcissus.java:}
http://www.jsgho.com/help/fwq/flower2.c:}
http://www.jsgho.com/help/fwq/flower2.c:}
http://www.jsgho.com/help/fwq/flower2.c:}
http://www.jsgho.com/help/fwq/recursive_flower.c:}
http://www.jsgho.com/help/fwq/recursive_flower.c:}
http://www.jsgho.com/help/fwq/recursive_flower.c:}
http://www.jsgho.com/help/fwq/recursive_flower.c:}
http://www.jsgho.com/help/fwq/flower.c:}
http://www.jsgho.com/help/fwq/flower.c:}
http://www.jsgho.com/help/fwq/flower.c:}
http://www.jsgho.com/help/fwq/flower.c:}
http://www.jsgho.com/help/fwq/flower.c:}
表达符集
^
锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$
锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
.
匹配一个非换行符的字符如:'gr.p'匹配gr后接一个任意字符,然后是p。
*
匹配零个或多个先前字符 如:' *grep' (注意*前有空格)匹配所有零个或多个空格后紧跟grep的行,需要用egrep 或者grep带上 -E 选项。 .*一起用代表任意字符。
[]
匹配一个指定范围内的字符,如'[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
w的反置形式,匹配一个或多个非单词字符,如点号句号等。
b
单词锁定符,如: 'bgrepb'只匹配grep。[1]用于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+匹配loveable或lovers,匹配一个或多个ov。
x{m},x{m,},x{m,n}
作用同x{m},x{m,},x{m,n}
POSIX字符类