替换反斜杠时,替换表达式中的sed命令坏选项

时间:2018-01-23 22:50:31

标签: bash shell sed

我目前正在运行以下命令并获得“替换中的错误选项”错误。我想要做的是在我替换的字符串中添加反斜杠,但我无法这样做。有什么想法吗?

代码:

 VAR="/host/test"
 echo ${VAR} | sed -e "s/\//\\\//g"

1 个答案:

答案 0 :(得分:3)

为什么要使用sed?

$ echo "${VAR//\//\\/}"
\/host\/test

它看起来有点可怕,但它工作正常。请参阅https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion中的${parameter/pattern/string}

您的问题发生是因为您在sed代码周围使用双引号("),而不是单引号(')。

在双引号中,\\被解释为单个\的转义序列,因此sed最终看到的代码是:

$ echo "s/\//\\\//g"
s/\//\\//g
#^  ^  ^

sed将其读作"搜索\/并将其替换为\\/g作为选项"。这是一个错误,因为/不是有效选项。

相关问题