我想在文件中写入反斜杠,并尝试用变量的值替换一些文本:
$ TEST=\\etc\\hello
$ echo $TEST
\etc\hello
但当我尝试使用以下方法替换它们时,反斜杠丢失了sed -i
$ sed -i "s/target_value/$TEST/" $(pwd)/test.txt
results "etchello" in test.txt
我希望该文件包含\etc\hello
。
答案1
这会将变量中的sed
解释为转义字符。您可以使用以下方式转义特殊字符:\
printf %q
sed -i "s/target_value/$(printf %q "$TEST")/" test.txt
或者,如果您将变量定义为:
TEST='\\etc\\hello'
请注意字符串周围的单引号,它包含$TEST
文字字符串。
答案2
您可以使用 shell 参数替换来转义反斜杠。例如:
$ set -x
+ set -x
$ echo 'foo target_value bar' | sed "s/target_value/${TEST//\\/\\\\}/"
+ echo 'foo target_value bar'
+ sed 's/target_value/\\etc\\hello/'
foo \etc\hello bar
也可以看看: