如何使用 mawk 指定正则表达式量词?

如何使用 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

答案1

符合 POSIX 标准的实现支持间隔正则表达式运算符awk

但由于awk最初不支持它们(nawk、mawk 和 gawk 都不支持),仍然有几个实现不支持它们,例如mawk, 这一个真正的 awkk(最初由 Brian Kernighan 维护awk)直到几天之前、 Solaris /bin/awk、 Solaris /bin/nawkawk大多数 BSD 中的一种。

与 一样egrep,一些实现反对添加对它们的支持,因为它们会破坏向后兼容性(在 BRE 中不存在\{x,y\}与 所使用的类似问题grep)。

\w\d\D是通常不支持的 perl 正则表达式扩展(busyboxawkgawk(不在 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?
  • ETC。

无论如何,mawk不​​支持本地化或多字节字符,因此您不妨限制为 ASCII 字符并使用[_a-zA-Z],[0-9][^0-9]

相关内容