基本正則表達式
元數據 |
意義和范例 |
^word |
搜尋以word開頭的行。 例如:搜尋以#開頭的腳本注釋行 grep –n ‘^#’ regular.txt |
word$ |
搜尋以word結束的行 例如,搜尋以‘.’結束的行 grep –n ‘.$’ regular.txt |
. |
匹配任意一個字符。 例如:grep –n ‘e.e’ regular.txt 匹配e和e之間有任意一個字符,可以匹配eee,eae,eve,但是不匹配ee。 |
\ |
轉義字符。 例如:搜尋’,’是一個特殊字符,在正則表達式中有特殊含義。必須要先轉義。 grep –n ‘\” regular.txt |
* |
前面的字符重復0到多次。 例如匹配gle,gogle,google,gooogle等等 grep –n ‘go*gle’ regular.txt |
[list] |
匹配一系列字符中的一個。 例如:匹配gl,gf。 grep –n ‘g[lf]’ regular.txt |
[n1-n2] |
匹配一個字符范圍中的一個字符。 例如:匹配數字字符 grep –n ‘[0-9]’ regular.txt |
[^list] |
匹配字符集以外的字符 例如:grep –n ‘[^o]‘ regular.txt 匹配非o字符 |
\{n1,n2\} |
前面的字符重復n1,n2次 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt |
\<word |
單詞是的開頭。 例如:匹配以g開頭的單詞 grep –n ‘\<g’ regular.txt |
word\> |
匹配單詞結尾 例如:匹配以tion結尾的單詞 grep –n ‘tion\>’ regular.txt |
擴展正則表達式
grep一般情況下支持基本正則表達式,可以通過參數-E支持擴展正則表達式,另外grep單獨提供了一個擴展命令叫做egrep用來支持擴展正則表達式,這條命令和grep -E等價。雖然一般情況下,基本正則表達式就夠用了。特殊情況下,復雜的擴展表達式,可以簡化字符串的匹配。
擴展正則表達式就是在基本正則表達式的基礎上,增加了一些元數據。
元數據 |
意義和范例 |
+ |
重復前面字符1到多次。 例如:匹配god,good,goood等等字符串。 grep –nE go+d’ regular.txt |
? |
匹配0或1次前面的字符 例如,匹配gd,god grep –nE ‘go?d’ regular.txt |
| |
或(or)的方式匹配多個字串 匹配god或者good。 |
() |
匹配整個括號內的字符串,原來都是匹配單個字符 例如:搜尋good或者glad grep –nE ‘g(oo|la)’ regular.txt |
() |
前面的字符重復0到多次。 例如匹配gle,gogle,google,gooogle等等 grep –nE ‘go*gle’ regular.txt |
1、grep -rn "hello,world!" *
* : 表示當前目錄所有文件,也可以是某個文件名
-r 是遞歸查找
-n 是顯示行號
-R 查找所有文件包含子目錄
-i 忽略大小寫
下面是一些有意思的命令行參數:
grep -i pattern files :不區分大小寫地搜索。默認情況區分大小寫,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。
這里還有些用於搜索的特殊符號:
\< 和 \> 分別標注單詞的開始與結尾。
例如:
grep man * 會匹配 ‘Batman’、‘manic’、‘man’等,
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
'^':指匹配的字符串在行首,
'$':指匹配的字符串在行尾,
注:“全字匹配”是指匹配的部分兩邊沒有word constituent(字母、數字和下划線),而不是要求匹配的部分全部由word constituent組成,如
eth0和eth0:1: grep -w eth0時兩者都會顯示,eth0和eth0_1: grep -w eth0時只顯示eth0
2,xargs配合grep查找
find -type f -name '*.php'|xargs grep 'GroupRecord'