如何在 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然后使用该变量

  • 变量后面的模式再次用引号引起来

相关内容