2018-4-25
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