Linux系統中grep,egrep命令是一種強大的文本搜索工具,它們能使用正則表達式和擴展正則表達式搜索文本,並把匹配到的行打印出來。git
搜尋特定字符串"the" 注: n爲顯示行號正則表達式
# grep -n "the" regular_express.txtshell
2.使用-v選項反向搜尋特定字符串"the"express
# grep -vn "the" regular_express.txtide
3.匹配大小寫"the"的這個字符串,使用-i選項工具
# grep -in "the" regular_express.txtspa
4.[] 表示匹配"[]"範圍內的字符串ci
搜索test或tast這兩個單詞時,發現他們有共同的't?st',因此能夠這麼搜尋字符串
# grep -n "t[ae]st" regular_express.txit
注: 大寫英文/小寫英文/數字 能夠使用 [a-z]/[A-Z]/[0-9]等方式來書寫,也能夠寫在一塊兒
[a-zA-Z0-9]表示要求字符串是數字以及英文
若是咱們要匹配有數字的那行,例子以下:
# grep -n "[0-9]" regular_express.txt
也能夠用
[[:lower:]] 代替a-z
[[:digit:]] 代替0-9
[[:upper:]]:全部大寫字母;
[[:lower:]]:全部小寫字母;
[[:digit:]]:全部的數字;
[[:alpha:]]:全部字母;
[[:space:]]:空白字符;
[[:punct:]]:標點符號;
範例:匹配以小寫字母開頭後面跟着兩個"oo"字母的字符串
# grep -n "[^[:lower:]]oo" regular_express.txt
匹配以數字結尾的字符串
# grep -n "[[:digit:]$]" regular_express.txt等
5.[^] 表示匹配"[]"範圍以外的字符串,例如[^0-9]表示非數字字符,[^A-Z]表示非大寫字符範圍
若是咱們要取得沒有數字的那行,則:
# grep -n "[0-9]" regular_express.txt
6.^word表示匹配的字符串(word)在行首
顯示行首爲"the"的字符串
# grep -n "^the" regular_express.txt
顯示行首是小寫字符
# grep -n "^[a-z]" regular_express.txt
7.word$表示匹配的字符串(word)在行尾
顯示行尾爲點 . 的那一行
# grep -n "\.$" regular_express.txt
顯示空白行
# grep -n "^$" regular_express.txt
8. .號表示匹配1個任意字符
找出g??d字符串,起頭g結束d的四個字符串
# grep -n "g..d" regular_express.txt
9. *表示匹配0到無窮多個(正則表達式)前一個字符
"goo*g"表明"gog","goog","gooog"...等
# grep -n "goo*g" regular_express.txt
10. \?表示匹配前面的字符0次或1次
匹配o字符0次或一次
# grep -n "ro\?t" regular_express.txt
11. \+匹配前面的字符至少一次
匹配至少含有一個o字符的字符串
grep -n "ro\+t" regular_express.txt
注: .號表明任意字符, .*則就表明空字符或者一個到N個任意字符
找出含兩個g中間含有任意個字符的字符串
# grep -n "g.*g" regular_express.txt
\表示轉義字符,在特殊字符前加\會將本來的特殊字符意義去除
注:{}由於在shell裏有特殊意義,因此須要加轉意符\來讓其失去意義
12. \{m,n\}表示找出n到m個(正則表達式)前一個字符
找出含兩個o的字符串
# grep -n "o\{2\}" regular_express.txt
找出g後含2到5個o而後以g結尾的字符串
# grep -n "go\{2,5\}g" regular_express.txt
13. \{n,\}表示n個以上的前一個RE字符
找出g後含2以上的o而後以g結尾的字符串
# grep -n "go\{2,\}g" regular_express.txt
14. \<或\b表示詞首錨定
找出以"ro"字符串位於單詞首的字符串
# grep -n "ro\<" regular_express.txt
15. \>或\b 表示詞尾錨定
找出以"ro"字符串位於單詞尾的字符串
# grep -n "\>ro" regular_express.txt
egrep支持使用擴展正則表達式,與grep用法基本相同,區別在於egrep除了詞尾錨定和詞尾錨定
時"<",">"符號要用"\"來轉意,其它符號則不用,
範例:
1. + 表示重複一個或一個以上的前一個RE字符
範例:egrep "go+d" regular_express.txt
表示搜尋(god)(good)(goood)...等等字符串,o+表明[一個以上的o]
2. ? 表示重複零個或一個的前一個RE字符
範例:egrep go?d" regular_express.txt
表示搜尋(gd)(god)字符串,o?表明[空的或1個o]
3. () 表示找出羣組字符串
範例:egrep "g(la|oo)d" regular_express.txt
表示搜尋(glad)或(good)字符串
4. ()+ 表示找出多個重複羣組的判別
範例: echo "AxyzxyzxyzxyzC"|egrep "A(xyz)+C"
表示搜尋開頭是A結尾是C,中間有一個以上的"xyz"字符串
其他用法不在詳細舉例,可模仿grep用法:
範圍匹配:
.號表示匹配任意單個字符
[ ]:匹配範圍內的任意單個字符
[^ ]:匹配範圍外的任意單個字符
次數匹配:
*:匹配任意次
?:匹配0次或1次
+:匹配1次或屢次
{m}:匹配匹配m次
{m,n}:匹配至少m次,至多n次
{0,n}:匹配至少0次至多無限次
{m,}:匹配至少m次
位置匹配:
^ 表示行首錨定
$ 表示行尾錨定
\<或\b 表示詞首錨定
\>或\b 表示詞尾錨定