2009-08-04 14 views
1

Hier ist der Eingang I haben und die Ausgabe Ich möchte:Sed - html Ersatz

Eingang:

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

Ausgang:

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

Dies scheint nicht passend dazu:

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

Hrm?

+0

Ich wusste nur nicht, wie eigentlich HTML-Code-Schnipsel haben; Es zeigte meine Elemente vorher an. –

Antwort

2

Ich glaube nicht, dass Sie dies wirklich mit sed tun können, weil ich keine Möglichkeit weiß, es zu überzeugen, auf mehreren Zeilen gleichzeitig zu arbeiten. Es möchte wirklich auf einer Linie zu einer Zeit arbeiten. Sie können es jedoch relativ einfach mit Perl tun:

+0

Mit N kannst du sed auf mehreren Zeilen arbeiten lassen, aber Perl ist definitiv der richtige Weg. –

+0

interessant. Was wäre eine Strategie für die Verwendung dieser Operation für mehrere Dateien? finden. -maxdepth 1 -type f -exec (dein Befehl) {} \; ? –

+0

genial das hat funktioniert. –

0

dann brauchen Sie nicht wirklich Substitution zu tun. Einfach nach der "<hr >" Zeile suchen, dann vorher "</div>" drucken.

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