我想在正则表达式大括号中使用变量
,但它似乎不起作用。
$ 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
然后使用该变量变量后面的模式再次用引号引起来