这是我的输入和我想要的输出:
输入:
<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
槽糕?
答案 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