2009-08-04 50 views
1

这里是输入我已经和我想要的输出:桑达 - HTML更换

输入:

<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 

Hrm?

+0

我只是不知道如何实际上有HTML代码片段;它之前展示了我的元素。 – 2009-08-04 17:47:34

回答

2

我不认为你真的可以用sed这样做,因为我不知道有什么办法说服它一次操作多行。它真的想要一次操作一条线。但你可以用Perl合理轻松地做到这一点:

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

使用N,你可以让sed在多行上工作,但是perl绝对是正确的方式。 – 2009-08-04 18:01:21

0

然后你不需要做替换。只需检查"<hr >"行,然后打印"</div>"

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