awkで正規表現中括弧内で変数を使用するには?

awkで正規表現中括弧内で変数を使用するには?

正規表現の中かっこ内で変数を使用したいのですが、うまく
いかないようです。

$ echo 'abcabcabc' | awk  '{ sub(/(abc){2}/,"XXX");  print }'
XXXabc

# this is not a correct result.
$ echo 'abcabcabc' | awk  '{ i=2; sub(/(abc){i}/,"XXX");  print }'
abcabcabc

$ echo 'abcabcabc' | awk  '{ if (/(abc){3}/)  print "ok" }'
ok

# this does not work correctly.
$ echo 'abcabcabc' | awk  '{ i=3; if (/(abc){i}/)  print "ok" }'

答え1

/.../正規表現定数のみがサポートされます。変数を渡すには引用符を使用する必要があります。

% echo 'abcabcabc' | awk  '{ i=2; sub("(abc){"i"}","XXX");  print }'
XXXabc
  • 変数の前の正規表現パターンは引用符で囲みます。"(abc){"i

  • i次に、その変数を使用します。

  • 変数の後のパターンは、二重引用符で囲まれます。

関連情報