【发布时间】:2010-12-12 13:08:24
【问题描述】:
我猜这一定是一个逃避问题,但我找不到。最令人沮丧的是,这是基于我使用的旧的sed 脚本,那么为什么一年后我尝试重新使用它时不能让它工作呢? ;)
框架:
我有一个文件,其中包含所有需要相同的文件名列表 搜索和替换的 HTML 字符串。
我需要更换
<a href="foo.html">Foo</a>
与
<a href="foo.html">Foo</a><a href="bar.html">Bar</a>
我正在使用:
#!/bin/bash
for i in $(cat sourcelist); do cat $i | sed 's,<a href="foo.html">Foo</a>,<a href="foo.html">Foo</a><a href="bar.html">Bar</a>,g' > $i.bak ; mv $i.bak $i ; done
#end
但我收到 sed 错误“未终止的 `s' 命令”。
我已经尝试转义双引号、斜杠,但仍然无法解析。
已经很晚了,我正在失去注意力。有什么锐利的眼睛可以捕捉到我错过的东西吗?
【问题讨论】:
-
它运行得很好。您是完全按照上面的方式进行替换,还是只是 foo 和 bar 的示例(也许您在某处有一个额外的逗号?)
-
与其尝试逃避事物,不如尝试消除它们?尝试使用 BAR 作为替换文本,单独匹配第一个标签,单独匹配“foo.html”,单独匹配 .html。简化直到 sed 停止抱怨,然后查看问题所在。
-
好点 Beta,一次性解决所有问题并不总是最好的主意。 :)