Ausgewählte Wörter mit sed duplizieren und ersetzen

Ausgewählte Wörter mit sed duplizieren und ersetzen

Ich muss ein Dokument ändern, das XML-Daten enthält. Eine Änderung konnte ich mit nicht einrichten sed.

Ich muss die folgenden Ausdrücke ändern von:

<Bild href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg" 
href="file:///user/folder/Desktop/Bildschirmfoto%202012-06-18%20um%2013.17.45.png"></Bild>

Zu:

<a href="http://test.server.at/media/somefolder/Bildschirmfoto%202012-06_fmt.jpeg" 
target="_blank"><img src="http://test.server.at/media/somefolder/Bildschirmfoto%202012-06_fmt.jpeg" 
alt="" width="350" height="" /></a>

Mein Problem: Ich konnte das nicht duplizieren, Bildschirmfoto%202012-06_fmt.jpegum den richtigen neuen Eintrag zu erzeugen. Der HTML-Tag steht irgendwo in der Zeile, deshalb kann ich nicht die ganze Zeile duplizieren...

sedWie kann ich dies mit oder anderen Linux-Befehlen tun ?

Antwort1

sed 's@.*href_fmt="[^/]*/\([^"]*\)".*@<a href="http://test.server.at/media/somefolder/\1target="_blank"><img src="http://test.server.at/media/somefolder/\1" alt="" width="350" height="" /></a>@'

Wir müssen den darin enthaltenen Bildnamen extrahieren href_fmt="Bilder/Bildschirmfoto%202012-06_fmt.jpeg". Daher schreiben wir zunächst ein Muster dafür:

.*href_fmt="[^/]*/\([^"]*\)".*

wobei .*alles vor href_fmt="
href_fmt="„matches href_fmt="=)“ [^/]*/übereinstimmt. Der Verzeichnisname Bilder/ \([^"]*\)stimmt mit unserem Bildnamen überein. \(\)wird verwendet, um eine Gruppe zu erstellen und sie zu verwenden, da sie \1in Zukunft ".*mit dem Rest der Zeile übereinstimmt. Jetzt werden wir alles in der Zeile entsprechend dem nächsten Ausdruck ersetzen:

<a href="http://test.server.at/media/somefolder/\1target="_blank"><img src="http://test.server.at/media/somefolder/\1" alt="" width="350" height="" /></a>

wobei dies \1dem oben genannten Bildnamen entspricht.

Hoffe, jetzt ist klar, wie es funktioniert.

verwandte Informationen