linux中grep命令的使用

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 ./ -maxdepth 1 | grep "*"find ./ -maxdepth 1 | grep *这两个命令才是等价的 对于 grep来讲 他只接受正则表达式匹配 * ? 这些字符需要加转义符
linux下的find与grep命令的功能不同。find 命令用于从目录树中查找与搜索条件匹配的文件;grep 命令用于查找输入流中包含模板文本的行。find 命令常结合grep命令使用, 以对搜索结果做进一步的筛选
匹配目录/cpl下所有(递归查找)以'#'开头的文件:
OCS101:~/cpl # grep -r '^#' .
./fk.c:#include
./fk.c:#include
./flower2.c:#include
./flower2.c:#include
./recursive_flower.c:#include
./recursive_flower.c:#include
./recursive_flower.c:#include
./recursive_flower.c:#define m 8
./flower.c:#include
./flower.c:#include
./flower.c:#include
./flower.c:#define N 1e8
匹配目录/cpl下所有(递归查找)以'}'结尾的文件:
OCS101:~/cpl # grep -r '^}' .
./fk.c:}
./fk.c:}
./fk.c:}
./Narcissus.java:}
./flower2.c:}
./flower2.c:}
./flower2.c:}
./recursive_flower.c:}
./recursive_flower.c:}
./recursive_flower.c:}
./recursive_flower.c:}
./flower.c:}
./flower.c:}
./flower.c:}
./flower.c:}
./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字符类
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
[:alnum:]
文字数字字符
[:alpha:]
文字字符
[:digit:]
数字字符
[:graph:]
非空字符(非空格、控制字符)
[:lower:]
小写字符
[:cntrl:]
控制字符
[:print:]
非空字符(包括空格)
[:punct:]
标点符号
[:space:]
所有空白字符(新行,空格,制表符)
[:upper:]
大写字符
[:xdigit:]
十六进制数字(0-9,a-f,A-F)
命令选项
-?
同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。
-a, --text
等价于匹配text,用于(Binary file (standard input) matches)报错
-b,--byte-offset
打印匹配行前面打印该行所在的块号码。
-c,--count
只打印匹配的行数,不显示匹配的内容。
-f File,--file=File
从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h,--no-filename
当搜索多个文件时,不显示匹配文件名前缀。
-i,--ignore-case
忽略大小写差别。
-q,--quiet
取消显示,只返回退出状态。0则表示找到了匹配的行。
-l,--files-with-matches
打印匹配模板的文件清单。
-L,--files-without-match
打印不匹配模板的文件清单。
-n,--line-number
在匹配的行前面打印行号。
-s,--silent
不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match
反检索,只显示不匹配的行。
-w,--word-regexp
如果被和引用,就把表达式做为一个单词搜索。
-R, -r, --recursive
递归的读取目录下的所有文件,包括子目录。 比如grep -R 'pattern' test会在 test 及其子目录下的所有文件中,匹配 pattern。
-V,--version
显示软件版本信息。
实例
要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。
$ ls -l | grep '^a'
通过管道过滤ls -l输出的内容,只显示以a开头的行。
$ grep 'test' d*
显示所有以d开头的文件中包含test的行。
$ grep 'test' aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]{5}' aa
显示所有包含每个字符串有5个连续小写字符的字符串的行。
$ grep 'w(es)t.*1' aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成'w(es)t.*1'就可以了。
注意
在某些机器上,要使用-E参数才能够进行逻辑匹配(详见下)
grep "a|b" (匹配包含字符样式为"a|b"的行)
grep -E "a|b" (匹配包含字符样式为"a"或"b"的行)
man grep里面关于-E参数的说明是
-E
Treats each pattern specified as an extended regular expression (ERE). A NULL value for the ERE matches every
line.
Note: The grep command with the -E flag is the same as the egrep command, except that error and usage messages
are different and the -s flag functions differently.
拓展命令
egrep 命令,搜索文件获得模式。
egrep 命令会在输入文件(缺省值为标准输入)中搜索与用 Pattern 参数指定的模式相匹配的行。这些模式是完整的正则表达式就像在 ed 命令中的那样(除了 (反斜杠)和 (双反斜杠))。下列规则也应用于 egrep 命令:
* 一个正则表达式后面带一个 + (加号)会匹配一个或多个的正则表达式。
* 一个正则表达式后面带一个 ? (问号)会匹配零个或一个该正则表达式。
* 由 | (竖线)或者换行符隔开的多个正则表达式会匹配与任何一个正则表达式所匹配的字符串。
* 一个正则表达式可以被包括在“()”(括弧)中进行分组。
换行符将不会被正则表达式匹配。
运算符的优先顺序是 [, ], *, ?, +, 合并, | 和换行符。
注意: egrep 命令与 grep 命令带 -E 标志是一样的,除了错误消息和使用消息不同以及 -s 标志的功能不同之外。
egrep 命令会显示包含该匹配行的文件,如果您指定了多于一个 File 参数的话。
对 shell 有特殊含义的字符($, *, [, |, ^, (, ), ) 出现在 Pattern 参数中时必须带双引号。如果 Pattern 参数不是简单字符串,通常必须用单引号将整个模式括起来。在表达式中比如 [a-z],减号表示通过当前整理序列。整理序列可以定义等价的类以供在字符范围中使用。它使用了快速确定性的算法,有时需要外部空间。[2]fgrep命令,为文件搜索文字字符串。
fgrep命令搜索 File 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep命令特别搜索 Pattern 参数,它们是固定的字符串。如果在 File 参数中指定一个以上的文件fgrep命令将显示包含匹配行的文件。
fgrep命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep命令使用快速的压缩算法。$, *, [, |, (, ) 和 等字符串被fgrep命令按字面意思解释。这些字符并不解释为正则表达式,但它们在 grep 和 egrep 命令中解释为正则表达式。
因为这些字符对于 shell 有特定的含义,完整的字符串应该加上单引号(‘ ... ’)。
如果没有指定文件,fgrep命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。

  • Linux閲岄潰grep -v鍛戒护浣滅敤鏄粈涔?
    绛旓細grep鍛戒护 grep 1.浣滅敤 Linux绯荤粺涓璯rep鍛戒护鏄竴绉嶅己澶х殑鏂囨湰鎼滅储宸ュ叿锛屽畠鑳戒娇鐢ㄦ鍒欒〃杈惧紡鎼滅储鏂囨湰锛屽苟鎶婂尮 閰嶇殑琛屾墦鍗板嚭鏉ャ俫rep鍏ㄧО鏄疓lobal Regular Expression Print锛岃〃绀哄叏灞姝e垯琛ㄨ揪寮忕増鏈紝瀹鐨勪娇鐢鏉冮檺鏄墍鏈夌敤鎴枫俫rep瀹舵棌鍖呮嫭grep銆乪grep鍜宖grep銆俥grep鍜宖grep鐨勫懡浠ゅ彧璺焔rep鏈夊緢灏忎笉鍚屻俥grep鏄痝rep...
  • Linux 涓 Grep 鍛戒护鐨甯歌绀轰緥,寰堝叏闈
    绛旓細鍛戒护绀轰緥锛氭弿杩 锛氫粎鏄剧ず鏂囦欢鍚 鍛戒护绀轰緥锛氭弿杩 锛氬尮閰嶇‘鍒囩殑鍗曡瘝 鍛戒护绀轰緥锛氭弿杩 锛氬尮閰嶆鍒欒〃杈惧紡妯″紡 鍛戒护绀轰緥锛氭弿杩 锛氭悳绱簩杩涘埗鏂囦欢 鍛戒护绀轰緥锛氭弿杩 锛氶掑綊鎼滅储鐩綍 鎮ㄥ彲鑳藉凡缁忕煡閬撹鍦ㄦ枃浠朵腑鎼滅储鐗瑰畾鏂囨湰鎴栨ā寮忥紝鎮ㄥ繀椤诲儚杩欐牱浣跨敤 grep锛氳鎴戜滑鐪嬬湅 grep 鍛戒护鐨鍑犱釜甯歌鐢ㄤ緥銆傞粯璁ゆ儏鍐涓锛...
  • linux甯哥敤鍛戒护linux甯哥敤鍛戒护璇﹁В
    绛旓細linux绯荤粺涓搷浣滄寚浠ゆ湁寰堝,鏈甯哥敤鎿嶄綔鎸囦护鏄:cd鍛戒护銆乧d鍛戒护銆grep鍛戒护銆乫ind鍛戒护銆乧p鍛戒护銆乵v鍛戒护銆乺m鍛戒护銆乸s鍛戒护銆乲ill鍛戒护銆乲illall鍛戒护銆乫ile鍛戒护銆乼ar鍛戒护銆乧at鍛戒护銆乧hgrp鍛戒护銆乧hown鍛戒护銆乧hmod鍛戒护銆乸wd鍛戒护銆乿im鍛戒护銆乬cc鍛戒护銆乼ime鍛戒护銆 1銆乧d鍛戒护 杩欐槸涓涓潪甯稿熀鏈,鐢ㄤ簬鍒囨崲褰撳墠鐩綍,瀹鐨鍙傛暟鏄鍒囨崲鍒...
  • Linux鏂囨湰鍖归厤鍛戒护grep涓巉grep浣跨敤鍏ㄨВ
    绛旓細Linux涓璯rep涓巉grep鍛戒护鐨勪娇鐢,涓や釜鍛戒护鐨勪娇鐢閮戒笌鏂囨湰鐨勬悳绱笌鍖归厤鐩稿叧,鏄疞inux鍏ラ棬瀛︿範涓殑鍩虹鐭ヨ瘑,鎺ヤ笅鏉ユ槸鎴戜负澶у鏀堕泦鐨凩inux鏂囨湰鍖归厤鍛戒护grep涓巉grep浣跨敤鍏ㄨВ,甯屾湜鑳藉府鍒板ぇ瀹躲 Linux鏂囨湰鍖归厤鍛戒护grep涓巉grep浣跨敤鍏ㄨВ grep grep (global search regular expression(RE) and print out the line,鍏ㄩ潰鎼滅储姝e垯琛...
  • linux绯荤粺grep鍛戒护鏈変粈涔堢敤
    绛旓細Linux grep鍛戒护鐢ㄤ簬鏌ユ壘鏂囦欢閲绗﹀悎鏉′欢鐨瀛楃涓层grep鎸囦护鐢ㄤ簬鏌ユ壘鍐呭鍖呭惈鎸囧畾鐨勮寖鏈牱寮忕殑鏂囦欢锛屽鏋滃彂鐜版煇鏂囦欢鐨勫唴瀹圭鍚堟墍鎸囧畾鐨勮寖鏈牱寮忥紝棰勮grep鎸囦护浼氭妸鍚湁鑼冩湰鏍峰紡鐨勯偅涓鍒楁樉绀哄嚭鏉ャ傝嫢涓嶆寚瀹氫换浣曟枃浠跺悕绉帮紝鎴栨槸鎵缁欎簣鐨勬枃浠跺悕涓-锛屽垯grep鎸囦护浼氫粠鏍囧噯杈撳叆璁惧璇诲彇鏁版嵁銆傝娉 grep [-abcEFGhHilLn...
  • Linux閲岄潰grep浣滅敤鏄粈涔?
    绛旓細Linux grep鍛戒护鐢ㄤ簬鏌ユ壘鏂囦欢閲绗﹀悎鏉′欢鐨瀛楃涓层grep鎸囦护鐢ㄤ簬鏌ユ壘鍐呭鍖呭惈鎸囧畾鐨勮寖鏈牱寮忕殑鏂囦欢锛屽鏋滃彂鐜版煇鏂囦欢鐨勫唴瀹圭鍚堟墍鎸囧畾鐨勮寖鏈牱寮忥紝棰勮grep鎸囦护浼氭妸鍚湁鑼冩湰鏍峰紡鐨勯偅涓鍒楁樉绀哄嚭鏉ャ傝嫢涓嶆寚瀹氫换浣曟枃浠跺悕绉帮紝鎴栨槸鎵缁欎簣鐨勬枃浠跺悕涓-锛屽垯grep鎸囦护浼氫粠鏍囧噯杈撳叆璁惧璇诲彇鏁版嵁銆傝娉 grep [-abcEFGhHilLn...
  • linux甯哥敤鍛戒护鏈夊摢浜?
    绛旓細瑙i噴锛氳繖浜鍛戒护鐢ㄤ簬鍦Linux绯荤粺涓鑸拰鎿嶄綔鏂囦欢鍙婄洰褰曘備緥濡傦紝浣跨敤ls鍛戒护鍙互鏌ョ湅鐩綍涓殑鏂囦欢鍜屽瓙鐩綍锛宑d鍛戒护鍙互鍒囨崲宸ヤ綔鐩綍锛宺m鍛戒护鍙互鍒犻櫎涓嶉渶瑕佺殑鏂囦欢鎴栫洰褰曘2. 鏂囨湰鏌ョ湅涓庡鐞嗗懡浠 cat锛氭煡鐪嬫枃浠跺唴瀹广俶ore & less锛氬垎椤垫煡鐪嬫枃浠跺唴瀹广grep锛氭悳绱㈡枃鏈枃浠朵腑鐨勭壒瀹氬瓧绗︿覆銆俿ed锛氭祦缂栬緫鍣紝鐢ㄤ簬鏂囨湰...
  • linux鐨勬煡鎵鍛戒护linux鐨鏌ユ壘grep
    绛旓細鎺ョ潃浣跨敤fuser-v8080/tcp灏卞彲浠ユ煡鐪嬪埌tomcat鐨勭鍙h鍝釜绋嬪簭鎴栬呰繘绋嬪崰鐢ㄤ簡銆俴alilinux鎬庝箞鏌ョ湅缃戠粶锛焛fconfig|grepaddr涓鑸琲fconfig鍚庯紝鍑哄嚭鐜板緢澶氫俊鎭紝eth0,eth1銆傘傘傛瘡涓涓猠th*灏变唬琛ㄤ竴寮犵綉鍗 鍦linux涓鏌ユ壘瀛楃涓茬敤浠涔堝懡浠わ紵Linux鏌ユ壘瀛楃涓茬敤grep鍛戒护锛屽彲浠ユ煡鎵炬枃浠讹紝涔熷彲浠ュ湪鍛戒护鐨缁撴灉涓煡鎵俱
  • linux涓鎬庝箞鐢grep鎸囦护鎵炬湁瀛楃涓茬粨灏剧殑琛
    绛旓細1銆侀鍏堝湪鎵撳紑鐨刲inux缁堢涓嬶紝鍙互浣跨敤grep --help鏌ョ湅锛屽涓鍥炬墍绀恒2銆佸父瑙鐢ㄦ硶锛屼娇鐢╣rep 鎺ュ叧閿瓧鏂囦欢锛屽涓嬪浘鎵绀恒3銆佸浜庡叧閿瓧鏈夌┖鏍兼垨鑰呮瘮杈冮暱鐨勫瓧绗︿覆锛屽彲浠ヤ娇鐢ㄥ崟寮曞彿鎴栧弻寮曞彿閿佸畾锛屽涓嬪浘鎵绀恒4銆佹敞鎰廹rep鏄绱㈠叧閿瓧锛屽鏋滆鎺掗櫎杩欎釜鍏抽敭瀛楋紝浣跨敤 grep -v锛屽涓嬪浘鎵绀哄氨瀹屾垚浜嗐
  • linux涓鈥grep鈥濆拰鈥渇ind鈥濈殑鍖哄埆鏄粈涔?
    绛旓細杩欐槸涓や釜涓嶅悓鐨勫懡浠わ紝鍏充簬grep锛歀inux绯荤粺涓璯rep鍛戒护鏄竴绉嶅己澶х殑鏂囨湰鎼滅储宸ュ叿锛屽畠鑳戒娇鐢ㄦ鍒欒〃杈惧紡鎼滅储鏂囨湰锛屽苟鎶婂尮 閰嶇殑琛屾墦鍗板嚭鏉ャ俫rep鍏ㄧО鏄疓lobal Regular Expression Print锛岃〃绀哄叏灞姝e垯琛ㄨ揪寮忕増鏈紝瀹鐨勪娇鐢鏉冮檺鏄墍鏈夌敤鎴枫傝linux涓嬬殑find 鍔熻兘锛氬湪鐩綍缁撴瀯涓悳绱㈡枃浠讹紝骞舵墽琛屾寚瀹氱殑鎿嶄綔銆傛鍛戒护...
  • 扩展阅读:linux grep查找关键字 ... psefgrep命令linux ... linux中grep命令详解 ... linux grub ... 一看就懂grep命令详解 ... linux中dd命令详解 ... linux常用命令scp ... locate指令大全 ... linux more命令 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网