我猜这必须是一个逃避问题,但我找不到它。最令人沮丧的是,这是基于我使用过的旧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”命令。
我已经尝试转义双引号,斜杠,两者,仍然无法解析它。
已经很晚了,我正在失去焦点。那里有锐利的眼睛可以捕捉到我所缺少的东西吗?
答案 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)
通过在for:
中运行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
可能不是最优雅的,但它确实有效。
干杯。