Regular-Expression

如何用 mawk 指定正則表達式量詞?

  • February 15, 2022

我熟悉指定有界正則表達式量詞的概念,如下所示:

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 正則表達式擴展,通常不受支持(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?
  • 等等

¹ 無論如何,mawk不支持本地化或多字節字元,因此您不妨限制為 ASCII 字元並使用[_a-zA-Z],[0-9][^0-9]

引用自:https://unix.stackexchange.com/questions/506119