awk oder so
Martin Werthmoeller
mw at lw-systems.de
Die Jan 16 20:17:17 GMT 2007
Am Tue, 16 Jan 2007 um 20:56 GMT +0100 schrieb Dominik P.H. Kalisch:
> Hallo Martin,
>
Hallo Dominik,
> > \D ist ein non-digit character (s.a. die Manpage von perlre).
> Er soll ja auch irgendwelche Zeichen finden. Oder ist da * besser?
>
* macht den vorherigen Ausdruck 0-n mal. Wenn Du ein belibiges Zeichen
matchen willst (ausser \n), dann nimm den Punkt '.'.
> >
> > Du musst die <,> maskieren, also s/(\<a\D+\<i\>)/$1<neu>/g
> Habe ich nun gemacht, aber leider passiert nichts. Weder fügt er das <neu>
> ein, noch bei \n\n eine Leerzeile...
>
Mit dem obigen Konstrukt wird die Datei zeilenweise eingelesen. Ein \n\n
kann also nicht erkannt werden. Auf eine leere Zeile (bzw. im engeren
Sinne auf einen leeren String) matcht Du mit:
^$
Falls Du 2 \n einfügen willst, dann einfach \n\n beim einzusetzenden
String angeben.
Für ein Testfile mit dem Inhalt
<a href="blah/blubber" style="blah: 10px;">Linktext</a>Blah <i> Blah, blah
gibt der Aufruf
perl -p -e 's/(\<a.+\<i\>)/$1<neu>/g' testfile
diese Ausgabe:
<a href="blah/blubber" style="blah: 10px;">Linktext</a>Blah <i><neu> Blah,blah
> Zumal er nun auch nur noch nach dem zweiten mal Ausführen überhaupt eine
> Reaktion zeigt, kate meldet dann, daß er die Datei neu laden will, da sie
> verändert wurde...
>
Du kannst das auch ohne Inplace-Edit (i) ausführen. Dann siehst Du sofort das
Ergebnis.
Viele Grüße,
Martin Werthmöller
--
LWsystems GmbH & Co. KG * Ihr Spezialist für Linux und Open Source Software
mw at lw-systems.de * http://lw-systems.de