【发布时间】:2021-10-04 06:29:56
【问题描述】:
我正在尝试替换文件中的某些文本,如标题中所述。我尝试了什么:
newdir=/dir/to/my/file
sed -i "s/'MyDir'/${newdir}/g" myconf.conf
上面的命令给出了这个错误:
`s' 的未知选项
【问题讨论】:
我正在尝试替换文件中的某些文本,如标题中所述。我尝试了什么:
newdir=/dir/to/my/file
sed -i "s/'MyDir'/${newdir}/g" myconf.conf
上面的命令给出了这个错误:
`s' 的未知选项
【问题讨论】:
解决“我的数据是否包含分隔符”问题的一种方法是使用 shell 变量扩展来转义分隔符:
sed -i "s|'MyDir'|${newdir//|/\\|}|g" myconf.conf
演示:
$ newdir="/a/dir/with|a/pipe"
$ sed "s|'MyDir'|${newdir}|g" <<< "this is 'MyDir' here"
sed: 1: "s|'MyDir'|/a/dir/with|a ...": bad flag in substitute command: 'a'
$ sed "s|'MyDir'|${newdir//|/\\|}|g" <<< "this is 'MyDir' here"
this is /a/dir/with|a/pipe here
您可以使用默认的斜线分隔符来执行此操作,并使用更多转义符
sed -i "s/'MyDir'/${newdir//\//\\\/}/g" myconf.conf
【讨论】:
& 和\ (尤其是尾随时)。
问题在于$newdir 包含/ 字符,因此您的sed 命令最终看起来像s/'MyDir'//dir/to/my/file/g,这将不起作用——第一个/ 有效地终止了您的sed 表达式,其他都是垃圾。
幸运的是,sed 让您使用 any 字符作为s 命令的分隔符,因此您可以改为:
sed -i "s|'MyDir'|${newdir}|g" myconf.conf
【讨论】:
newdir 的内容,因为您没有将参数传递给sed:您正在动态构建sed 脚本。