一、什麼是正則
正則就是一串有規律的字元串。掌握好正則對于編寫shell有很大幫助!!!
二、grep、egrep工具
1、指令格式:grep -cinvrABC 'word' filename
c 行數
i 不區分大小寫
-c 列印符合要求的行數 grep -c 'nologin' /etc/passwd (顯示過濾字元的行數)
(為什麼過濾的選項什麼标紅? which grep)
-i 忽略大小寫 grep -i 'nologin' passwd (不分大小寫,标紅顯示我們過濾的字元)

-n 輸出符合要求的行及行号 grep -ni 'nologin' passwd
-v 列印不符合要求的行 grep -v 'nologin' passwd (列了沒有這個字元的行)
-r 周遊所有的子目錄 grep -r 'root' /etc/ (列出ect目錄所有檔案包括root字元的行)
-A 後面跟一個數字,列印出符合要求的行及在行下面列出不符合要求的兩行
grep -nA2 'nologin' passwd
-B 後面跟一個數字,列印出符合要求的行及在行上面列出不符合要求的兩行
grep -B2 'nologin' passwd
-C 後面跟一個數字,列印出符合要求的行及在行上下面各列出不出不符合要求的兩行
grep -C4 'nologin' passwd
2、grep的具體用法
正規表達式:
grep '[0-9]' passwd 過濾所有包括數字的行;
grep -v '[0-9]' /etc/inittab 過濾所有不包含數字的行;
grep -n '^#' /etc/inittab 過濾有#号開頭的行;
grep -nv '^#' /etc/inittab 過濾出沒有#的行;
grep '[^0-9]' /etc/inittab 非數字就符合要求,^就是非;
grep '^[^0-9]' /etc/inittab 非數字開頭的行。第一個^就是開頭的意思,在括号裡就取反,非的意思。
grep 'r.o' passwd “.”表示任意的一個字元。也就是說r.o可以=rao \r2o \rAo
grep 'o星号o' passwd 星号表示0個或多個*前面那個字元,在這一行裡表示n個o
grep '.星号' passwd .星号表示任意個任意字元
grep 'o{2}' passwd 表示比對2次o,{ }表示一個範圍。如果覺得脫義符号不好寫,也可以寫成:egrep 'o{2}' passwd 也可以寫成: grep -E 'o{2}' passwd,
grep '(oo){2}' passwd 表示比對2次oo
grep 'o+o' passwd + 表示1次或多次的+前面的那個字元。可以寫成:egrep 'o+o' passwd
grep 'o\?o' passwd ?表示 ? 号前面字元的重複0次或1次.可以寫成: egrep 'o?o' passwd
grep -E 'root|nologin' passwd | 表示或者,同時過濾出有root或者nologin的行
*把一個目錄下,過濾所有 .php文檔中含有eval的行*
grep -r --include=".php" 'eval' /data/