1. 基本正則表達式支持的元字符
元字符 描述 用法舉例 . 匹配任意一個字符。 a., x.y, x.., .ab. [] 匹配指定範圍內的任意字符。 [abc], [0-9], [a-z], [A-Z], [[:alpha:]], [[digit:]], [[:alnum:]], [[space:]], [[:upper:]], [[:lower:]], [[:punct:]] [^] 匹配指定範圍以外的任意字符,即‘[]’的取反。 [^0-9], [^[:space:]], [^[:punct:]] * 對其前的字符匹配任意次。 ab*, .*, *ab, xy*z, [[:space:]]*ab, xy[^[:punct:]]* ? 對其前的字符匹配0次或1次。使用時要用轉義符,即’\?’ ab?, [[:space:]]?ab, xy[^[:punct:]]? {} 對其前的字符匹配指定區間次。使用時要用轉義符,即’\{\}’ ab\{3\}, ab\{1,\}, ab\{0,3\}, ab\{1,5\} () 分組符。使用時要用轉義符,即’\(\)’ ab\(xyz\)*, \(abc\)like\(xyz\) \num 分組引用。嚴格意義上並非元字符,而是一種特定的轉義。要和分組符聯合使用纔有意義。 he \(love\)s his \1r ^ 行首錨定符 ^#.*, ^Root $ 行尾錨定符 china$, ^$ < 詞首錨定符。使用時要用轉義符,即’\<’ \<[[:digit:]], \<Root > 詞尾錨定符。使用時要用轉義符,即’\>’ \<root\>, \<[[:alnum:]]*\>
2. 擴展正則表達式增加的元字符
元字符 描述 用法舉例 + 對其前的字符匹配至少1次。 ab+, ^#[[:space:]]+[^[:space:]]+ | 組內多選一符。 the selection is (yes|no), user name is (root|hadoop|redhat|centos)
注: 在擴展正則表達式模式下,除了詞首錨定符’<’和詞尾錨定符’>’使用時要進行轉義外,其它元字符都不需要做轉義!
3. grep和egrep命令常用的選項
-v 取反顯示,即顯示錶達式不匹配的行。
-o 僅顯示被匹配到的文本內容,而非整行的內容。
-i 匹配時不區分字符大小寫。
-E 使用擴展的正則表達式模式。
-A num 同時顯示匹配到的行的下面num行
-B num 同時顯示匹配到的行的上面num行
-C num 同時顯示匹配到的行的上面和下面各num行
--color=auto 對匹配到的文本內容用相應字體顏色顯示。
-q 靜默模式,即不輸出任何內容,只關心匹配的執行結果,適合在shell腳本中使用。
-e expr 有多個正則表達式條件時,每個表達式前需用 -e 進行聯合多個表達式條件。默認只有一個表達式條件時,-e 可以省略。
4. 正則表達式中關於引用的對應關係
正則表達式中使用’\1’,’\2’,’\3’… 引用前面對應的括號中的內容,遵循的原則是:左括號從左到右出現的次序。’\1’引用的內容是從左邊開始,第1個左括號開始到其對應的右括號內內容;’\2’引用的內容是從左邊開始,第2個左括號開始到其對應的右括號內內容;’\3’引用的內容是從左邊開始,第3個左括號開始到其對應的右括號內內容;以此類推。因此,從括號的層次角度,是先引用外層括號內的內容,再引用內層括號內的內容。例:
info.text:
1 xyxyabababxyab
2 xyabxyab
3 xyabxyabxyab
4 xyxyxy
5 xyxyabababxyabxyxyababab
6 xyxyabababxyabxyxyabababxyabxyab
[zjp@localhost test]$ egrep --color=auto "((xy){2}(ab){3})(\2\3)*\1\4{2}" info.text
6 xyxyabababxyabxyxyabababxyabxyab
5. 在 ` ` 中支持的字符串模式匹配操作符’=~’
不需要對模式匹配操作符右邊的正則表達式加引號。
支持的正則表達式是擴展的正則表達式模式。即對所有元字符都不需要進行轉義。
不支持詞首錨定符’<’和詞尾錨定符’>’。
lineStr=19934567
if [[ "$lineStr" =~ ([1-9][0-9]+|1[0-9][0-9]) ]] ; then
echo "$lineStr"
fi