所以我需要编辑一堆 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
,而是一个文字字符,应该被视为模式的一部分。