regular expression engine
描述匹配模式的特殊字元和一般字元組成;
BRE POSIX
基本Regex,
ERE
擴充Regex;
gawk
支援
ERE
,
sed
不支援。
1)
Regex模式:
l
區分大小寫
l
空格作為一般字元處理
l
工具或語言中的使用模式常為
/pattern/
特殊字元:
.*[]^${}/+?|()
BRE
“
/
”
轉義
escape
字元
正斜扛也需要轉義,雖然它不是特殊字元——因為
/
被用作表示模式?
“
^
”,定位器,從頭開始
如
sed -n
'/^abc/p'
;
^
必須放到Regex的最前,否則作為一般字元
“
$
”,定位器,尋找末尾
sed -n '/abc$/p'
;
eg:
尋找整行
, '/^this$/p'
;尋找空行
'/^$/d';
“
.
”
匹配分行符號外的任何單字元,必須有一個字元;
“
[]
”,字元類
character class
(幾個字元之一),如
sed -n '/[Yy]es/p'
否定字元類,使用
[^]
,如
[^ch]
,表示不含這幾個字元,但是仍然需要一個字元;
定義字元範圍,如
[0-9]
,
[a-z]
,[
a-cx-z
]定義多個範圍
BRE
的特殊字元類:
[[:alpha:]]
任意字母字元,大小寫
[[:alnum:]]
任意字母、數字
[[:blank:]]
空格或定位字元
[[:digit:]]
數字
[[:lower:]]
任意小寫
[[:print:]]
任意可列印
[[:punct:]]
標點符號
[[:space:]]
任意空白字元,
包括垂直定位字元,
如空格,
lt
,
nl
,
CR
等
[[:upper:]]
任意大寫
[[:cntrl:]]
ASCII
控制字元
[[:graph:]]
非控制非空格
[[:xdigit:]]
16
進位數字
“
*
”
*
前的字元可不出現或多次出現,
/colou*r/
“
.*
”,出現在一行文本上任意位置的單詞
*
用於字元類:
eg:
$echo "bt" | sed -n '/b[ac]*t/p'
#TBD
:
ac
可任意出現?
ERE
“
?
”
同
*
的不同:不出現或僅出現一次,也可與字元類連用
“
+
”
同
*
的不同:必須出現一次或多次
“
{}
”
對可重複字元出現次數進行限制
(interval)
,
{m}
或
{m,n}
,
/{min,max/}
,{
m,
}表示最少
m
次
be{1}t
#
等價於
bet
?
gawk
中需指定參數
--re-interval
,
eg:
echo
"bt"|gawk --re-interval '/be{1}t/{print $0}'
用於字元類:
gawk
--re-interval "/b[ae]{1,2}t"
“
|
”
邏輯
or
,指定多個Regex,
gawk '/cat|dog/'
“
()
”
分組,一個組合作為一個標準字元處理,
eg:
gawk
'/sat(urday)?/
#
要求
urday
出現
0
到
1
次;
gawk
'/(c|b)a(b/t)/'
#TBD
:等價於
'[cb]a[bt]'??