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、これ本当の奇妙なk(もともとBrian Kernighanによって管理されていますawk数日前、Solaris /bin/awk、Solaris /bin/nawkawkほとんどのBSD。

BREと同様に、一部の実装では以前のバージョンとの互換性が損なわれる可能性があるため、サポートを追加することに反対します(BREで使用されているものと同様の問題はありegrepません)。\{x,y\}grep

\w\dは通常サポートされていません(busyboxおよび(POSIXモードではない場合)\Dサポート)Perl正規表現拡張です。標準に対応する項目はそれぞれですが、まだサポートされていません。awkgawk\w[[:alnum:]_][[:digit:]][^[:digit:]]mawk

Solarisでは使用する必要があります/usr/xpg4/bin/awk

以前のバージョンのGNUでは、awkこのオプションを使用するか、正規表現間隔をサポートする環境で起動する必要があります--re-intervalPOSIXLY_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]

関連情報