Regular-Expression
如何用 mawk 指定正則表達式量詞?
我熟悉指定有界正則表達式量詞的概念,如下所示:
Quantifier Legend Example Sample Match {3} Exactly three times \D{3} ABC {2,4} Two to four times \d{2,4} 156 {3,} Three or more times \w{3,} regex_tutorialer
但是,我無法
mawk
在手冊頁或線上找到類似上述內容的內容。該
mawk
命令是否具有此功能,或者是否有不同的方式來實現相同的效果?我正在使用版本
1.3.3
符合 POSIX 的
awk
實現支持區間正則表達式運算符。但是由於
awk
最初不支持它們(nawk、mawk 和 gawk 都不支持),仍然有幾個實現不支持它們,例如mawk
,一個真正的 awk(最初由 Brian Kernighan 維護)k
直到幾天前, Solaris , Solaris ,大多數 BSD。awk``/bin/awk``/bin/nawk``awk
與 for 一樣
egrep
,一些實現反對添加對它們的支持,因為它們會破壞向後兼容性(\{x,y\}
在 BRE 中沒有與 使用的類似的問題grep
)。
\w
,\d
,\D
是 perl 正則表達式擴展,通常不受支持(busyboxawk
和gawk
(非 POSIX 模式時)支持\w
)。標準等效項分別為[[:alnum:]_]
,[[:digit:]]
,[^[:digit:]]
但尚不支持mawk
¹。在 Solaris 上,您需要使用
/usr/xpg4/bin/awk
.對於舊版本的 GNU
awk
,您必須使用該--re-interval
選項,或者POSIXLY_CORRECT=anything
在環境中啟動它以支持正則表達式間隔。對於不支持它們的實現,您可以使用
?
,+
和的組合*
:
x{1,3}
->xx?x?
或(x|xx|xxx)
x{1,}
->x+
x{0,}
->x*
x{3,}
->xxx+
或xxxx*
x{3,6}
->xxxx?x?x?
- 等等
¹ 無論如何,
mawk
不支持本地化或多字節字元,因此您不妨限制為 ASCII 字元並使用[_a-zA-Z]
,[0-9]
和[^0-9]