![如何在 awk 中的正则表达式大括号中使用变量?](https://linux22.com/image/103675/%E5%A6%82%E4%BD%95%E5%9C%A8%20awk%20%E4%B8%AD%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%A4%A7%E6%8B%AC%E5%8F%B7%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我想在正则表达式大括号中使用变量
,但它似乎不起作用。
$ 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
然后使用该变量变量后面的模式再次用引号引起来