[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Regular expression



Das schicke ich jetzt aber nochmal an die Liste :-)
On Tuesday 09 January 2007 19:57, you wrote:
> Hallo,
>
> Am Die, 09 Jan 2007, Gebhard Dettmar schrieb:
> >On Tuesday 09 January 2007 01:46, David Haller wrote:
> >> Am Mon, 08 Jan 2007, Christian Brabandt schrieb:
> >> >,----[ cat format.awk ]-
> >> >
> >> >| {
> >> >|     if($0~"2006\n")
> >> >|         {
> >> >|         $0=$0 getline
> >> >|         }
> >> >|     print $0
> >> >| }
> >> >
> >> >`----
> >>
> >> Komplizierter als nötig ;) Du kannst direkt in der Adresse
> >> selektieren. Du verwendest das leere Muster, d.h. der Block wird auf
> >> jede Zeile angewendet.
> >
> >Verstehe ich nicht: liegt es nicht daran, dass if($0~"2006\n") nichts
> >matcht?
>
> Achso, das auch.
>
> >Das hab ich auch nicht kapiert, wie man das Newline da reinbringt:
> >ich hab in der Manpage nach Substitution geguckt und sub(r,s) und
> >gsub(r,s) gefunden -
> >awk '{ gsub(2006\n, "2006") ; print }' <datei> bringt:
	             ^^^^^^^
Also Syntaxfehler meinerseits (vom fehlenden Einlesen der nächste Zeile, 
s.u., mal abgesehen)

> >1: unexpected character '\'
> >Heißt das, dass es mit direktem Replacement nicht geht (also Newline
> > mit 2006)?
>
> Doch. Im Prinzip schon. Aber awk arbeitet wie sed auch zeilenweise,
> d.h. man muss erstmal die nächste Zeile einlesen:
>
> $ echo 'bla 2006
> , 123, 45
> blubb; 2006
> , 97, asd
> ' | awk '$0 ~ /2006$/{getline t; $0 = $0 t; gsub("2006\n","2006");
> print;}' ^      ^
> oder
>
> ' | awk '$0 ~ /2006$/{getline t; $0 = $0 t; gsub(/2006\n/,"2006");
> print;}'
>
Alles klar. Danke!!!
Gebhard
-- 
Break into jail and claim police brutality.



Reply to: