2016-11-29 6 views
0

Gegeben:löschen Linien zwischen zwei Spielen nach dritten inneren Muster sed Verwendung

<tagA/> 
<tagB>...</tagB> 
<setOfFoo> 
    <foo>...</foo> 
    <foo> 
    ...some special content... 
    </foo> 
    <foo>...</foo> 
    <foo>...</foo> 
</setOfFoo> 
<tagN/> 

Ich möchte nur den gesamten Knoten von foo entfernen, wenn bestimmten Inhalten hat, ich habe versucht, so etwas wie:

sed '/<foo>/,/special content/d;/special content/,/<\/foo>/d' 
# or 
sed '/<foo>/,/<\/foo>/{1,/special content/d;/special content/,$d}' 
# or 
sed '/<foo>/,/<\/foo>/{:a;N;ba;/special content/d}' 

Aber keiner von denen funktioniert, keine Ahnung?

Nicht vergessen: andere foo Tags sollten nicht gelöscht werden.

+0

Verwenden Sie einen XML/HTML-Parser (xmllint, xmlstarlet ...). – Cyrus

Antwort

0

Während ich versuchte, ein bisschen mehr ich die Lösung gefunden:

sed '/<foo>/,/special content/N;/special content/,/<\/foo>/d' 

Ich stellte noch die Frage der Gemeinschaft zu helfen.

Verwandte Themen