regular expression
1、正則表達式概述
常用的正則表達式引擎
POSIX基本正則表達式BRE引擎
POSIX擴展正則表達式BRE引擎
正則表達式: 是一類字符所書寫出的模式(pattern)
元字符: 不表示字符本身的意義,用於額外功能性描述
基本正則表達式和擴展正則表達式
2、基本正則表達式
基本正則表達式的元字符:grep -E
字符匹配:
.: 任意單個字符
[]: 指定範圍內的任意單個字符
[0-9],[[:digit:]]
[a-z],[[:lower:]]
[A-Z],[[:upper:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]
[^]: 指定範圍外的任意單個字符 #非#
次數匹配:用來指定匹配其前面的字符的次數
*: 任意次
例子: x*y,xxy,xy,y
.*: 匹配任意長度的任意字符
\?: 0次或1次
x\?y,xy,y,xxy
貪婪模式:儘可能的長的去匹配字符;
\{m\}: 匹配m次
\{m,n\}:
\{m,\}: 至少m次
\{0,n\}: 至多n次
錨定:
^:開頭
$:結尾
^$: 空白行
\<: 定位詞首
\b: 分別代替詞首詞尾
\>: 定位詞尾
分組:
\(\)
\(ab\)*xy
引用:
\1: 後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容
\2:
...
\(a.b\)*xy\1: #a6bxya6b
He like his lover.
She love her liker.
He love his lover.
She like her liker.
grep '\(l..e\).*\1r' test.txt
3、擴展正則表達式
擴展正則表達式的元字符:
egrep:使用擴展正則表達式來構建模式,相當於grep -E
字符匹配:
.: 任意單個字符
[]: 指定範圍內的任意單個字符
[0-9],[[:digit:]]
[a-z],[[:lower:]]
[A-Z],[[:upper:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]
[^]: 指定範圍外的任意單個字符 #非#
次數匹配:
*: 匹配其前面的字符任意次
?: 匹配其前面的0或1次
+: 匹配其前面的字符至少1次
{m}: 匹配其前面的字符m次
{m,n}:至少m次,至多n次
{m,}: 至少m次
{0,n}:至多n次
錨定:
^:行首
$:行尾
^$: 空白行
\<,\b: 詞首
\>, \b: 詞尾
分組:
(): 分組
|: 或者,ac|bc
特殊字符
[:alnum :] 文字數字 匹配任意字母字符0-9 a-z A-Z
[:alpha:] 文字 匹配任意字母,大寫或小寫
[:digit:] 數字 0-9
[:graph:] 非空字符( 非空格控制字符)
[:lower:] 小寫字符
[:upper:] 大寫字符
[:cntrl:] 控制字符
[:print:] 非空字符( 包括空格)
[:punct:] 標點符號
[:blank:] 空格和TAB字符
[:xdigit:] 16 進制數字
[:space:] 所有空白字符( 新行、空格、製表符)