1. 程式人生 > >2018-4-25

2018-4-25

正則grepegrep

9.1 正則介紹_grep上

9.2 grep中

9.3 grep下



9.1 正則介紹_grep上

技術分享圖片

這章算是重點,對以後寫shell腳本有很大的幫助



grep 過濾關鍵詞

創建一個grep目錄,把/etc/passwd復制過來做一些實驗。

基本用法 grep 'name’目錄

技術分享圖片




grep -c 行數(過濾出來的有幾行)

技術分享圖片



grep -n 行號

技術分享圖片


grep -i 不區分大小寫


grep -v 取反,把沒有nologin的行列出來

技術分享圖片


grep -r 遍歷所有子目錄,grep -r 'root' /etc

技術分享圖片

這些紫色的都是子目錄。


grep -A,把關鍵詞的行列出來之外還列出下面的指定行

技術分享圖片

-B -C同樣

技術分享圖片




9.2 grep中

技術分享圖片


grep '[0-9]' /etc/inittab //表示過濾出含有0-9範圍的數字 就符合要求(所有帶數字的行


grep -v '^#' /etc/sos.conf //^的意思是以什麽開頭,就是指以#開頭的,即列出所有不是#開頭的文件


grep -v '^#' /etc/sos.conf |grep -v '^$' //在上面的基礎上再進行過濾


grep -v '^[^a-zA-Z]' test.txt //^再方括號裏的含義是裏面字符的取反


grep 'r.o' passwd // 這個點表示任意一個字符, 比如r1o rbo roo都符合條件


grep ' o*o' passwd // *:*號左邊的字符重復0-n次,0次就一個o 1次就oo


grep '.*' //任意一個字符,所有都匹配


grep 'o\{2\}' /etc/passwd // o出現兩次,需要脫譯,否則{}無法識別。 實際上是o{2} 然後脫譯





9.3 grep下

上面grep 'o\{2\}' /etc/passwd 需要脫譯


用egrep無需脫譯

egrep 'o{2}' passwd 就直接識別 等同於grep 'o\{2\}' /etc/passwd ,方便很多。

還有一種grep -E 等同於 egrep


egrep 'o+' /etc/passwd // +號前面字符一次或多次,類似*號只是*有零次,o+t 之類都可以。


egrep 'o?t' /etc/passwd // ?號前面的字符為0或1,有就是ot 沒有就是t


egrep 'root|nologin' /etc/passwd // 豎線表示或者,可以多個 比如 a|b|c|d ,+i可以不區分大小寫。



擴展

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

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






2018-4-25