it-swarm.com.de

So ersetzen Sie eine XML-Dateizeile mit sed

Ich habe den folgenden Text in File.XML:

<http-listener name="default" socket-binding="http" max-post-size="1073741824" />

Ich würde das gerne ersetzen durch

<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>

Ich habe es versucht

sed -i 's/<http-listener name="default" socket-binding="http" max-post-size="1073741824" /><!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>' test.xml

Aber ich habe einen Fehler

2
Picasu27

Fügen Sie den erforderlichen Block (<!--) beim Start (^) ein:

sed 's/^/<!-- /'

Beispiel:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^/<!-- /' <<<"$var"
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" />

Um strukturierte Daten wie xml zu analysieren, sollten Sie ein Tool verwenden, das die Struktur versteht, z. xmlstarlet.


Antwort auf die bearbeitete Frage:

Sie können präzise Teilzeichenfolgen am Anfang und am Ende abgleichen. Verwenden Sie in der Ersetzung \0, um auf die gesamte Übereinstimmung zu verweisen und die gewünschten Ersatzteilzeichenfolgen zu platzieren:

sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/'

Beispiel:

% var='<http-listener name="default" socket-binding="http" max-post-size="1073741824" />'

% sed 's/^<http-listener name="default".*>$/<!-- \0 -->>/' <<<"$var"                     
<!-- <http-listener name="default" socket-binding="http" max-post-size="1073741824" /> -->>
2
heemayl