2009-08-04 15 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