天天看點

9.1 正則介紹_grep(上);9.2 grep(中);9.3 grep(下)

擴充:

把一個目錄下,過濾所有*.php文檔中含有eval的行 :

# grep -r --include="*.php" 'eval' /data/

9.1 正則介紹_grep(上)

正則是什麼?

• 正則就是一串有規律的字元串

• 掌握好正則對于編寫shell腳本有很大幫助

• 各種程式設計語言中都有正則,原理是一樣的

正則三劍客:grep/egrep、sed、awk

grep

跟下面的參數!

-c

過濾出的關鍵詞 共有多少行數

-i

過濾出的關鍵詞 不區分大小寫

-n

過濾出的關鍵詞 顯示行号

-v

取反(非關鍵詞行也列出來)

-r

周遊所有子目錄(含有關鍵詞行的子目錄會紫色标記)

-A

-A跟任意數字(如3):過濾出關鍵詞行和關鍵詞下面任意數字行(如3行)

-B

-B跟任意數字(如3): 過濾出關鍵詞行和關鍵詞上面任意數字行(如3行)

-C

-B跟任意數字(如3):過濾出關鍵詞行和關鍵詞上下各任意數字行(如3行)

grep [-cinvABC] 'word' filename

-c   行數

-i   不區分大小寫

-n   顯示行号

-v   取反

-r   周遊所有子目錄

-A   後面跟數字,過濾出符合要求的行以及下面n行

-B   同上,過濾出符合要求的行以及上面n行

-C   同上,同時過濾出符合要求的行以及上下各n行

1. 建立grep目錄做測試:                

[root@hao-01 ~]#mkdir grep

2. 進入grep目錄:                  

[root@hao-01 ~]#cd grep

3. 拷貝/etc/passwd檔案到目前目錄下做測試:

[root@hao-01 grep]#cp /etc/passwd .

1. grep -c 過濾出含有關鍵詞行,統計共有多少行 ?  

grep -c '關鍵詞'  檔案名

[root@hao-01 grep]#grep -c 'nologin' passwd

2. grep -n 過濾出含有關鍵詞行列印到螢幕,并标記行号 :

grep -n '關鍵詞'  檔案名

[root@hao-01 grep]#grep -n 'nologin' passwd

3. grep -ni 關鍵詞行列印到螢幕,并标記行号同時關鍵詞不區分大小寫!

grep -ni '關鍵詞'  檔案名   (檔案内容中,關鍵詞含有大小寫字母都可以篩選出來)

[root@hao-01 grep]#grep -ni 'nologin' passwd

4. grep -vni 不包含關鍵詞行,關鍵詞也不區分大小寫,并标記行号列印到螢幕!

grep -vni '關鍵詞'  檔案名

[root@hao-01 grep]#grep -vni 'nologin' passwd

5. 篩選出/etc下, 含有關鍵詞行的子目錄并周遊(紫色标記的) :

grep  -r  '關鍵詞'  指定目錄

[root@hao-01 grep]#grep -r 'nologin' /etc/

6. grep -nA任意數字

過濾出含有關鍵詞行,同時列出關鍵詞行 下面的2行 :

grep -nA2 '關鍵詞'  檔案名

[root@hao-01 grep]#grep -nA2 'root' passwd

7. grep -nB任意數字

過濾出含有關鍵詞行,同時列出關鍵詞行 上面的2行 :

grep -nB2 '關鍵詞'  檔案名

[root@hao-01 grep]#grep -nB2 'root' passwd

8. grep -nC任意數字

過濾出含有關鍵詞行,同時列出關鍵詞行 上面和下面各2行 :

grep -nC2 '關鍵詞'  檔案名

[root@hao-01 grep]#grep -nC2 'root' passwd

9.2 grep(中)  

1. 過濾出 包含0-9數字的行:grep '[數字範圍]' 檔案名

[root@hao-01 grep]#grep '[0-9]' passwd

2. 過濾出 不包含0-9數字的行:grep -v '[數字範圍]' 檔案名

[root@hao-01 grep]#grep -v '[0-9]' passwd

^放在方括号裡面,是方括号裡面字元的反義(非)

^放在方括号外面,以方括号裡面字元開頭

3. 過濾出 以#号開頭的行:grep -n '^#' 檔案名

[root@hao-01 grep]#grep -n '^#' passwd

4. 過濾出 不以#号開頭的行:grep -nv '^#' 檔案名

[root@hao-01 grep]#grep -nv '^#' passwd

5. 過濾出 含有非0-9數字行(純數字行不會顯示),非數字字元紅色标記:

[root@hao-01 grep]#grep -n '[^0-9]' passwd

6. 過濾出 含有非a-z字母行(純字母行不會顯示),非字母字元紅色标記:

[root@hao-01 grep]#grep -n '[^a-z]' passwd

7. 過濾出 不以0-9數字開頭的行:

[root@hao-01 grep]#grep -n '^[^0-9]' passwd

8. 過濾出 以0-9數字開頭的行:

[root@hao-01 grep]#grep -nv '^[^0-9]' passwd

9. 過濾出 不以a-z字母開頭的行:

[root@hao-01 grep]#grep -n '^[^a-z]' passwd

10. 過濾出 以a-z字母開頭的行:

[root@hao-01 grep]#grep -nv '^[^a-z]' passwd

9.3 grep(下)

1. 比對出 含有關鍵詞.關鍵詞的行(. 點表示任意的一個字元):

grep '關鍵詞.關鍵詞' 檔案名

[root@hao-01 grep]#grep 'r.o' passwd

2. 比對出  含有關鍵詞的行(*左邊字元可重複任意次):

[root@hao-01 grep]#grep 'o*o' passwd

3. 比對出 所有字元所有行都比對了:

[root@hao-01 grep]#grep '.*' passwd

4. 比對出 包含關鍵詞.*關鍵詞行:

grep '關鍵詞.*關鍵詞' 檔案名

[root@hao-01 grep]#grep 'hao.*bash' passwd

5. {}裡的數字,表示{}前面關鍵詞的重複範圍:

[root@hao-01 grep]#grep 'o\{2\}' passwd

或[root@hao-01 grep]#egrep 'o\{2\}' passwd

或[root@hao-01 grep]#grep -E 'o\{2\}' passwd

6. oo組合的2次重複,比對出不少于4個o的行:

[root@hao-01 grep]#egrep '(oo){2}' passwd

7. +(加号)左邊關鍵詞o 可1次或多次重複,後面比對關鍵詞t

[root@hao-01 grep]#egrep 'o+t' passwd

8. ?前面字元的重複次數為0或1,

[root@hao-01 grep]#egrep 'o?2o' passwd

9. | 或者比對出包含關鍵詞

      (或者)比對出關鍵詞

      (或者)比對出包含關鍵詞的行!

[root@hao-01 grep]#grep -E 'root|nologin|hao' passwd

總結:

.  

任意一個字元

*  

0個或多個*号前面的字元

.*

  通配 所有的都比對,沒有字元也比對

{}  

花括号裡的數字,表示{}前面的字元範圍,前面字元可以用()括起來

+

一個或多個加号前面的字元

?  

0個或1個 問号前面的字元

|  

表示 或者,意思

本文轉自 主内安詳 51CTO部落格,原文連結:http://blog.51cto.com/zhuneianxiang/2061197,如需轉載請自行聯系原作者