此文爲一堂基礎知識課(大神請無視)。首先來了解下正則到底是什麼,有什麼特點,又有何用。
正則表達式是一個用來描述或匹配一系列符合某個規則的字符串的單個字符串。(很繞口吧,其實它就是一堆有規則的字符集合而已)
其特點大致歸納如下:
- 正則有三類,分爲 basic、extended、perl。grep默認使用basic。
- 正則區分大小寫。
- 中括號[ ]裏是沒有元字符的,都代表本身的含義,例如[.]就表示匹配一個點.的意思。
- 小括號 () 可以將其中的內容作爲一個整體(但是默認的基本正則不支持唉)。
下面科普一下基礎知識。(記住最好)
元字符
元字符是構造正則表達式的一種基本元素。
先記住幾個常用的:
元字符 | 說明 |
. | 匹配除換行符以外的任意字符 |
^ | 匹配字符串開始 |
$ | 匹配字符串結束 |
\b 或\< | 錨定單詞的詞首 和 詞尾 |
\w | 匹配字母或數字或下劃線或漢字 |
例如:
$echo "abcde" | grep '.c'
輸出:(紅色部分代表已匹配),和 grep '\wc' 效果一樣。
\b 錨定sh的詞首或詞尾,想要精確匹配sh或者其它單詞則需前後都錨定。如下:
$ echo "shutdown,bash" | grep '\bsh'
輸出:
$ echo "shutdown,bash" | grep 'sh\b'
輸出:
$ echo "shutdown,bash" | grep '\bsh\b'
輸出:
只要不包含數字、字母、漢字、下劃線 這四個標識符就可以認爲是獨立的單詞,而\b 匹配的就是這四個標識符,也就是說\b 爲單詞而生。
^$ 可以輸出空白行。
重複限定符
它能使你的表達式更簡潔。
語法 | 說明 |
* | 重複零次或更多次 |
\? | 重複零次或一次 |
\{n\} \{n,\} \{n,m\} | 重複n次 、重複n次或更多次、重複n到m次 |
基本正則 不能直接使用 問號 和 ()和{ }等等,需要加轉義字符 \ 才行。
字符組
[] //表示匹配其中的任一字符,相當於或。連字符'-'表示範圍。
$ echo "hello123" | grep [a-g]
排除型字符組
運算符^ 在括號內則表示匹配一個未列出的字符,和取反一樣。
$ echo "hello123" | grep [^e2]
$ echo "hello123hi" | grep h[^e]
<未完待續>
參考:
https://www.cnblogs.com/kissdodog/archive/2013/04/22/3036649.html