Sed 无法正确解释管道

Sed 无法正确解释管道

好的,这很难解释,所以我将给出一个可重现的例子:

我有一个包含以下行的文本文件test.txt

somesetting-parameter /an/old/path

我想将其替换为可以通过获取的路径ls,例如:

ls /etc/init.d/ssh*

输出/etc/init.d/ssh(Debian) 或/etc/init.d/sshd(others)

现在,我想使用来替换它sed,并使用反引号功能,因此我运行了以下命令:

sed -i "s/\/an\/old\/path/`ls /etc/init.d/ssh* | sed 's/\//\\\//g'`/" test.txt

但它给了我错误

sed: -e expression #1, char 9: unknown option to `s'

当(子)命令ls /etc/init.d/ssh* | sed 's/\//\\\//g'给出适当的输出时

\/etc\/init.d\/ssh

管道用于外部命令正确解析斜杠。

笔记:

我知道只需使用一个变量就可以在 shell 脚本中轻松完成这个操作,但我问这个问题是为了知道哪里出了问题,而不是为了寻找替代方法。

答案1

问题是双引号数据仍将被 shell 处理,在到达 sed 之前删除反斜杠...

尝试使用单引号,或者在双引号内使用两个反斜杠。

相关内容