如何使用未终止的行修复此sed问题?

时间:2009-11-03 06:57:09

标签: bash unix scripting sed

我猜这必须是一个逃避问题,但我找不到它。最令人沮丧的是,这是基于我使用过的旧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错误“unterminated`s”命令。

我已经尝试转义双引号,斜杠,两者,仍然无法解析它。

已经很晚了,我正在失去焦点。那里有锐利的眼睛可以捕捉到我所缺少的东西吗?

3 个答案:

答案 0 :(得分:2)

由于空间问题,尽量不要像这样使用for循环。此外,猫咪也没用。

while read -r line
do
    sed 's,<a href=\"foo.html\">Foo</a>,<a href=\"foo.html\">Foo</a><a href=\"bar.html\">Bar</a>,g' "${line}" > "${line}.bak"
    mv "${line}.bak" "${line}"
done < sourcelist

当然,如果您使用的是GNU sed,则可以使用-i选项为您创建备份。

答案 1 :(得分:0)

您是否尝试过转义引号? e.g:

#!/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

答案 2 :(得分:0)

通过在f​​or:

中运行Amro的while循环来修复它
#!/bin/bash

for i in $(cat sourcelist); do

while read  line
do
    sed 's,<a href=\"foo.html\">FOO</a>,<a href=\"foo.html\">FOO</a>
    <a href=\"bar.html\">Bar</a>,g'
        done < $i > $i.bak ; mv $i.bak $i ; done

可能不是最优雅的,但它确实有效。

干杯。