我熟悉指定的有界正则表达式量词的概念,如下所示:
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
间隔regexp运算符在POSIX兼容的awk
实现中受支持。
但作为awk
最初并不支持它们(也没有NAWK也不mawk也不GAWK),还有几个实现不支持他们像mawk
时,一个真实的awk(最初由Brian Kernighan的保持下去,k
在awk
),直到前几天,Solaris /bin/awk
,Solaris /bin/nawk
,这awk
是大多数BSD的简称。
与for一样egrep
,有几种实现方式反对增加对它们的支持,因为它们会破坏向后兼容性(与\{x,y\}
所使用的BRE中没有类似的问题grep
)。
\w
,\d
,\D
是它们通常不支持perl的正则表达式扩展(busybox的awk
和gawk
(当不在POSIX模式)支持\w
)。标准等同物将是[[:alpha:]_]
,[[:digit:]]
,[^[:digit:]]
分别,但不被支持mawk
yet¹。
在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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句