26期20180703 正則 grep
9.1 正則介紹_grep上
9.2 grep中
9.3 grep下
擴展
把一個目錄下,過濾所有*.php文檔中含有eval的行
grep -r --include="*.php" 'eval' /data/
正則表達式
使用grep可以查找文件中的關鍵字。
語法: grep "關鍵字" 文件名
有一些選項是可以選的。
-n 是顯示行號
-c顯示行數,一共在這個文件中有多少行帶有這個關鍵字
-v取反,就是多少行沒有這個關鍵字,也就是除了關鍵字的那兩行外
-A 數字,表示顯示出關鍵字以及往下數字行的內容
-B 數字,是和A想反是往上數字行
-C 數字 就是既有上又有下,往上數字行 往下數字行
grep '[0-9]' filename
表示0-9範圍裏的數字匹配
也可以采用排除的選項 -v
grep -v '[0-9]' filename
關鍵字裏的參數
grep -v '^#' filename
grep -v '^[0-9]' filename 就是查找非開頭為數字的行
-v是取反 ^是行開始的意思 ^#就是以#為開頭的行
grep -v ‘^#’ inittab 取出來首字母不為#的行
註意:這個^是在[]裏面
grep '[^0-9]' inittab 作用是非0-9,只要不是數字任何一個字符都符合要求。就是說哪怕有一個字符不為0,這一行都滿足要求。
這個是以一個非數字的字符開頭的行,只要不是數字開頭都符號,哪怕是後面有數字都沒有關系。所以下面
同樣的,假如前面再加上一個 ^ 就表示首位也不能是數字,所以首位有數字的也沒了。
grep 'r.o' passwd 這裏的點代表了任意一個字符,占位符。
grep 'o*o' passwd *表示左邊匹配0到無限次,右邊必須存在
如果是使用'.*'的話,表示匹配任意字符。*的左邊可有可無嘛
比如像找某個用戶的那一行,直接用'用戶名.*bash' 就可以查到
正則中{}表示範圍,但是需要用阻轉義符 \
grep 'o\{2\}' passwd 表示有2個o的
grep 'o\{1,3\}' passwd 表示1-3個o,記得用逗號,
但是轉義符比較免費,看起來也比較不舒服,是否可以不用\?
那樣的話,egrep就登場了
egrep是grep的擴展
grep -E = egrep
egrep 'o{2}' passwd等同於 grep 'o\{2\}' passwd 等同於 grep -E 'o{2}' passwd
如果是像匹配最後一個字符是什麽字母的話,需要在這個字母後面加上$ 換行符 表面後面沒有了
比如查找s開頭n結尾
+ 在egrep 或者 grep -E下使用無需轉義符
+和*很像,區別是 + 表示+左邊一次或者無數次 而*是表示左邊0次或者無數次
egrep 'o?t' passwd 問號表示問號前面字符出現的次數為0或者1
|表示或者,但是也需要使用egrep或者grep -E 來使用。|是選其一,可以有多個
26期20180703 正則 grep