grep命令的用法2

7、模式出現機率
抽取包含數字4至少重複出現兩次的所有行,方法如下:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep '4\{2,\}' data.f
483     may     5PA1998 USP     37.00   KVM9D   644


上述語法指明數字4至少重複出現兩次,注意有無邊界字符的區別。                                                                              
同樣,抽取記錄使之包含數字9 9 9(三個9),方法如下:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep '9\{3,\}' data.f
219     dec     2CC1999 CAD     23.00   PLV2C   68


如果要查詢重複出現次數一定的所有行,語法如下,數字9重複出現兩次或三次:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep '9\{3\}' data.f
219     dec     2CC1999 CAD     23.00   PLV2C   68
[sam@chenwy sam]$ grep '9\{2\}' data.f
483     Sept    5AP1996 USP     65.00   LVX2C   189
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234


有時要查詢重複出現次數在一定範圍內,比如數字或字母重複出現26次,下例匹配數字8重複出現26次,並以3結尾:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ cat myfile
83
888883
8884
88883
[sam@chenwy sam]$ grep '8\{2,6\}3' myfile
888883
88883


8
、使用grep匹配或者模式
g r e p
命令加- E參數,這一擴展允許使用擴展模式匹配。例如,要抽取城市代碼爲2 1 92 1 6,方法如下:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep -E '219|216' data.f
219     dec     2CC1999 CAD     23.00   PLV2C   68
216     sept    3ZL1998 USP     86.00   KVM9E   234


9
、空行
結合使用^$可查詢空行。使用- c參數顯示總行數:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep -c '^$' myfile


使用- n參數顯示實際在哪一行:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep -c '^$' myfile


10
、匹配特殊字符
查詢有特殊含義的字符,諸如$ . ' " * [] ^ | \ + ? ,必須在特定字符前加\。假設要查詢包含“.”的所有行,腳本如下:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep '\.' myfile


或者是一個雙引號:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep '\"' myfile


以同樣的方式,如要查詢文件名c o n f t r o l l . c o n f(這是一個配置文件),腳本如下:

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep 'conftroll\.conf' myfile


11
、查詢格式化文件名
使用正則表達式可匹配任意文件名。系統中對文本文件有其標準的命名格式。一般最多六個小寫字符,後跟句點,接着是兩個大寫字符。

[Copy to clipboard] [ - ]

CODE:

[sam@chenwy sam]$ grep '^[a-z]\{1,6\}\.[A-Z]\{1,2\}' filename


這個寫法我不知道有沒有錯 :oops:  :oops:  :oops:
                                                                              
12
查詢IP地址
要查看n n n . n n n網絡地址,如果忘了第二部分中的其餘部分,只知有兩個句點,例如n n n . n n . .。要抽取其中所有nnn.nnn IP地址,使用[ 0 - 9 ] \ { 3 \ } \ . [ 0 - 0 \ { 3 \ } \。含義是任意數字出現3次,後跟句點,接着是任意數字出現3次,後跟句點。

[Copy to clipboard] [ - ]

CODE:

[0-9]\{3\}\.[0-9]\{3\}\.'


上面還有一點錯,改天更正


1、類名

g r e p
允許使用國際字符模式匹配或匹配模式的類名形式。
類名及其等價的正則表達式類等價的正則表達式類等價的正則表達式

QUOTE:

[ [ : u p p e r : ] ] [ A - Z ] [ [ : a l n u m : ] ] [ 0 - 9 a - zA-Z]
[ [ : l o w e r : ] ] [ a - z ] [ [ : s p a c e : ] ]
空格或t a b
[ [ : d i g i t : ] ] [ 0 - 9 ] [ [ : a l p h a : ] ] [ a - z A - Z ]


例一:取以5開頭,後跟至少兩個大寫字母:

[Copy to clipboard] [ - ]

CODE:

$grep '5[[:upper:]][[:upper]]' data.f


取以PD結尾的所有產品代碼:

[Copy to clipboard] [ - ]

CODE:

grep '[[:upper:]][[:upper:]][P,D]' data.f


2
、使用通配符*的匹配模式

[Copy to clipboard] [ - ]

CODE:

$cat testfile
looks
likes
looker
long


試試如下:

[Copy to clipboard] [ - ]

CODE:

grep "l.*s" testfile


如在行尾查詢某一單詞,試如下模式:

[Copy to clipboard] [ - ]

CODE:

grep "ng$" testfile


這將在所有文件中查詢行尾包含單詞ng的所有行。

3
、系統grep

文件passwd

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# grep "sam" /etc/passwd
sam:x:506:4::/usr/sam:/bin/bash


上述腳本查詢/ e t c / p a s s w d文件是否包含sam字符串

如果誤輸入以下腳本:

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# grep "sam" /etc/password
grep: /etc/password:
沒有那個文件或目錄


將返回g r e p命令錯誤代碼'No such file or directory'
上述結果表明輸入文件名不存在,使用g r e p命令- s開關,可屏蔽錯誤信息。
返回命令提示符,而沒有文件不存在的錯誤提示。

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# grep -s "sam" /etc/password


如果g r e p命令不支持- s開關,可替代使用以下命令:

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# grep "sam" /tec/password >/dev/null 2>&1


腳本含義是匹配命令輸出或錯誤( 2 > $ 1),並將結果輸出到系統池。大多數系統管理員稱/ d e v / n u l l爲比特池,沒關係,可以將之看成一個無底洞,有進沒有出,永遠也不會填滿。

上述兩個例子並不算好,因爲這裏的目的只想知道查詢是否成功。

如要保存g r e p命令的查詢結果,可將命令輸出重定向到一個文件。

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# grep "sam" /etc/passwd >/usr/sam/passwd.out
[root@Linux_chenwy sam]# cat /usr/sam/passwd.out
sam:x:506:4::/usr/sam:/bin/bash


腳本將輸出重定向到目錄/ t m p下文件p a s s w d . o u t中。

使用ps命令
使用帶有ps x命令的g r e p可查詢系統上運行的進程。ps x命令意爲顯示系統上運行的所有進程列表。要查看D N S服務器是否正在運行(通常稱爲n a m e d),方法如下:

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# ps ax|grep "named"
2897 pts/1    S      0:00 grep named


輸出也應包含此g r e p命令,因爲g r e p命令創建了相應進程, ps x將找到它。在g r e p命令中使用- v選項可丟棄p s命令中的g r e p進程。如果ps x不適用於用戶系統,替代使用ps -ef。這裏,由於我沒有DNS服務,因而只有grep進程。

對一個字符串使用grep
g r e p
不只應用於文件,也可應用於字符串。爲此使用e c h o字符串命令,然後對g r e p命令使用管道輸入。

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# STR="Mary Joe Peter Pauline"
[root@Linux_chenwy sam]# echo $STR | grep "Mary"
Mary Joe Peter Pauline


匹配成功實現。

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# echo $STR | grep "Simon"


因爲沒有匹配字符串,所以沒有輸出結果。

4
egrep
e g r e p
代表e x p r e s s i o nextended grep,適情況而定。e g r e p接受所有的正則表達式, e g r e p的一個顯著特性是可以以一個文件作爲保存的字符串,然後將之傳給e g r e p作爲參數,爲此使用- f開關。如果創建一個名爲g r e p s t r i n g s的文件,並輸入4 8 44 7

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# vi grepstrings
[root@Linux_chenwy sam]# cat grepstrings
484
47



[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# egrep -f grepstrings data.f
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
484     nov     7PL1996 CAD     49.00   PLV2C   234


上述腳本匹配d a t a . f中包含4 8 44 7的所有記錄。當匹配大量模式時, - f開關很有用,而在一個命令行中敲入這些模式顯然極爲繁瑣。

如果要查詢存儲代碼3 2 L2 C C,可以使用(|)符號,意即“|”符號兩邊之一或全部。

[Copy to clipboard] [ - ]

CODE:

[root@Linux_chenwy sam]# egrep '(3ZL|2CC)' data.f
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
219     dec     2CC1999 CAD     23.00   PLV2C   68
216     sept    3ZL1998 USP     86.00   KVM9E   234


可以使用任意多豎線符“ |”,例如要查看在系統中是否有帳號l o u i s em a t t ypauline ,使用w h o命令並管道輸出至e g r e p

[Copy to clipboard] [ - ]

CODE:

$who |egrep (louise|matty|pauline)


還可以使用^符號排除字符串。如果要查看系統上的用戶,但不包括m a t t yp a u l i n e,方法如下:

[Copy to clipboard] [ - ]

CODE:

$who |egrep -v '^(matty|pauline)'


如果要查詢一個文件列表,包括s h u t d o w ns h u t d o w n sr e b o o tr e b o o t s,使用e g r e p可容易地實現。

[Copy to clipboard] [ - ]

CODE:

$egrep '(shutdown |reboot) (s)?' *

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章