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.jpeg
um den richtigen neuen Eintrag zu erzeugen. Der HTML-Tag steht irgendwo in der Zeile, deshalb kann ich nicht die ganze Zeile duplizieren...
sed
Wie 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 \1
in 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 \1
dem oben genannten Bildnamen entspricht.
Hoffe, jetzt ist klar, wie es funktioniert.