【发布时间】:2017-08-27 13:46:58
【问题描述】:
首先,对于可能重复的问题,我们深表歉意。我是 bash 脚本的新手,我什至无法找出一些要搜索的关键字。话虽如此,我尽量简化问题描述:
我有一个仅包含这一行的文本文件 (test.txt):
REPLACE
我运行了以下命令,它应该用代码变量值if (A & B) 替换文件的文本(即REPLACE)。
code="if (A & B)" ; awk -v var="${code}" '{ gsub(/REPLACE/, var); print }' test.txt
预期输出我希望 code 变量值按原样打印:
if (A & B)
实际输出不知何故将&符号扩展为'REPLACE',即gsub正则表达式参数:
if (A REPLACE B)
也许我需要转义与号,但不幸的是,code 变量人口超出了我的控制范围,因此我无法手动操纵它的值。
仅供参考 awk 版本是“GNU awk 4.1.4,API:1.1(GNU MPFR 3.1.5,GNU MP 6.1.2)”
谢谢!
【问题讨论】:
-
&表示 awk 正则表达式中的“替换完全匹配”,包括 gsub。你需要转义它:code="if (A \\& B)"(是的,有两个斜杠,因为 shell 也会进行扩展)