天天看點

shell腳本工具之grep指令

   grep(縮寫來自Globally search a Regular Expression and Print)是Linux系統的一種強大的文本搜尋工具,它能使用正規表達式搜尋文本,并把比對的行列印出來.egrep和fgrep都是grep的擴充,支援更多的re元字元,fgrep就是fixed grep或fast grep.linux使用GNU版本的grep,它功能更強,可以通過-G、-E、-F指令行選項來使用egrep和fgrep的功能.grep可用于shell腳本,因為grep通過傳回一個狀态值來說明搜尋的狀态,如果模闆搜尋成功,則傳回0,如果搜尋不成功,則傳回1,如果搜尋的檔案不存在,則傳回2.我們利用這些傳回值就可進行一些自動化的文本處理工作.

grep的正規表達式元字元

^              行首定位符

$              行尾定位符

.              比對任意一個字元

*              比對0個或多個前導字元

[]             比對指定範圍内的其中一個字元

[^]            比對不要範圍内的字元

\<             詞首定位符

/〉            詞尾定位符

x\{m\}         重複x字元m次

x\{m,\}        重複x字元最少m次

x\{m,n\}       重複x字元m到n次

檔案内容:

[root@tong1 opt]# ll passwd

-rw-r--r--. 1 root root 1087 Mar 19 17:39 passwd

[root@tong1 opt]# cat passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[root@tong1 opt]# 

1.grep指令格式

grep [選項] 字元模式 [檔案名1,檔案名2.........]

-c:隻輸出比對行的計數。

-I:不區分大 小寫(隻适用于單字元)。

-h:查詢多檔案時不顯示檔案名。

-l:查詢多檔案時隻輸出包含比對字元的檔案名。

-n:顯示比對行及 行号。

-s:不顯示不存在或無比對文本的錯誤資訊。

-v:顯示不包含比對文本的所有行。

2.查找r開頭的行

[root@tong1 opt]# grep '^r' passwd

[root@tong1 opt]#

3.查找以c結尾的行

[root@tong1 opt]# grep 'c$' passwd

4.查找以h開頭,t結尾,中間隻有兩個字元的行

[root@tong1 opt]# grep '\<h..t\>' passwd

5.查找檔案内容隻要有h或q的字元

[root@tong1 opt]# grep '[hq]' passwd

6.查找每行有a到o字元出現7次的

[root@tong1 opt]# grep '[a-o]\{7\}' passwd

7.在一些檔案中查找相同的内容

[root@tong1 opt]# grep root passwd*

passwd:root:x:0:0:root:/root:/bin/bash

passwd:operator:x:11:0:operator:/root:/sbin/nologin

passwd1:root:x:0:0:root:/root:/bin/bash

passwd1:operator:x:11:0:operator:/root:/sbin/nologin

8.顯示grep結果的行号

[root@tong1 opt]# grep root -n passwd

1:root:x:0:0:root:/root:/bin/bash

11:operator:x:11:0:operator:/root:/sbin/nologin

9.顯示包含字元的檔案名

[root@tong1 opt]# grep root -l passwd

passwd

10.顯示檔案中的字元

[root@tong1 opt]# grep root -c passwd

2

11.查找内容是單詞

[root@tong1 opt]# grep -w halt passwd

12.反向過濾

[root@tong1 opt]# grep -v bash passwd | grep -v nologin passwd

[root@tong1 opt]#