擴展正則表達式
事實上,一般實驗者只需要熟悉基礎的正則表達式就足夠了。不過有時候為了簡化命令操作,了解一些使用范圍更廣的擴展表達式,會更加方便。
一、簡單對比
正規表示法:
$ grep -v '^$' regular_express.txt |grep -v '^#'
需要使用到管線命令來搜尋兩次! 那么如果使用延伸型的正規表示法,我們可以簡化為:
$ egrep -v '^$|^#' regular_express.txt
利用支持延伸型正規表示法的 egrep 與特殊字符 “|” 的組功能來區隔兩組字符串,如此一來,是否方便很多呢?
此外,grep 默認僅支持基礎正則表達式,如果要使用擴展性正則表達式,可以使用 grep - E。grep -E 與 egrep 相當於命令別名關系。
二、擴展規則
1、 + :表示重復一個或一個以上的前一個 RE 字符
$ egrep -n 'go+d' regular_express.txt
普通寫法:
$ grep -n 'goo*d' regular_express.txt
2、 ? : 表示重復零個或一個前一個 RE 字符
$ egrep -n 'go?d' regular_express.txt
操作截圖:
上述三條命令結果如上,發現 ‘goo*d’ 與 ‘go+d’ 等同,而 ‘go?d’ 結果不同。
3、 | :表示用或的方式找出數個字符串
$ egrep -n 'gd|good' regular_express.txt
4、 () : 表示找出群組字符串
$ egrep -n 'g(la|oo)d' regular_express.txt 也就是搜尋(glad)或 good 這兩個字符串
操作截圖:
5、()+ : 多個重復群組判別
$ echo 'AxyzxyzxyzxyzC'|egrep 'A(xyz)+C' $ echo 'AxyzxyzxyzxyzC'|egrep 'A(xz)+C'
也就是要找開頭是 A 結尾是 C 中間有一個以上的 ‘xyz’ 或 ‘xz’ 字符串的意思。
結果顯示 ‘A(xyz)+C’ 可以匹配, ‘A(xz)+C’ 沒有匹配項。
操作截圖: