Sed - html替换

时间:2009-08-04 17:38:35

标签: html sed

这是我的输入和我想要的输出:

输入:

<hr /> 
(newline)
( carriage return)
    (tabs, spaces)<div id="sidebar">

输出:

</div>
<hr />
(newline)
( carriage return)
    (tabs, spaces)<div id="sidebar">

这似乎与之不符:

sed -i 's/<hr \/>[[:space:]]*<div id="sidebar">/<\/div><hr \/><div id="sidebar">/g' file.txt

槽糕?

2 个答案:

答案 0 :(得分:2)

我认为你不能用sed真正做到这一点,因为我不知道有什么方法可以说服它一次操作多行。它真的想一次在一条线上运行。不过,你可以用Perl轻松地完成它:

perl -pi -e 's/<hr \/>\s*<div id="sidebar">/<\/div><hr \/><div id="sidebar">/gs;' -e 'BEGIN { $/ = ""; }' file.txt

答案 1 :(得分:0)

那么你真的不需要做替换。只需检查"<hr >"行,然后在其前面打印"</div>"

awk '/<hr \/>/{    print "</div>" } 1 ' file