使用反斜杠包含变量替换字符串内容时文件中缺少反斜杠

使用反斜杠包含变量替换字符串内容时文件中缺少反斜杠

我想在文件中写入反斜杠,并尝试用变量的值替换一些文本:

$ 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

也可以看看:

相关内容