Linux,如何使用 sed 编辑撇号?

Linux,如何使用 sed 编辑撇号?

所以我需要编辑一堆 html 文件。我以前曾批量使用过 sed,但我遇到的问题是,我要定位和替换的文本字符串都包含撇号。虽然您可以通过选择任何您想要的来更改 sed 的分隔符,但显然您不能对命令开头和结尾的撇号执行相同的操作...还有其他方法可以做到这一点吗?

我正在寻找“_blank”);“/>”并将其更改为其他内容。使用@作为分隔符,我可以更改几乎任何部分,但我想向其中添加更多参数,因此需要能够“发送”撇号。有没有办法做到这一点,还是我需要寻找另一个命令?同样,许多文件都不想手动执行。

谢谢,

151

编辑:我没有确切地写出我想要做的事情,因为这些网站支持“不要要求为你做事”的原则,但我在评论中被要求这样做,所以本质上……

寻求改变

ALIGN=CENTER '_blank');" /> 

到:

ALIGN=CENTER '_blank', 'width=100%'); />

我尝试过的:

find . -name "*.php" -print | xargs sed -i "s@'_blank');" />@'_blank', 'width=100%'); />@g

当然,在测试中我没有使用*.php,我只是在一个特定的文件上进行测试。

答案1

你的命令应该是

find . -name '*.php' -exec sed -i 's/);"/, \'width=100%');/' {} \;

不需要带有xargs: 的管道,该-exec选项将为您完成这一操作;也不-print需要。

分隔'...'符保护要更改的文本不受外壳的影响;因此,您需要转义 (IE,以'反斜杠开头,\')替换中的撇号表示sed:看,这不是模式的结尾s,而是一个文字字符,应该被视为模式的一部分。

相关内容