Re: [OT] Regular expression
Hallo,
Am Die, 09 Jan 2007, Christian Brabandt schrieb:
>Gebhard Dettmar schrieb am Dienstag, den 09. Januar 2007:
>> Ja, aber es matcht nicht. Genauso wenig, wie /2006\n/, im Ggs. zu /2006$/
>> Versteh ich auch nicht ganz. Muss was mit der zeilenweisen Orientierung zu
>> tun haben
>
>*Grummel*, ich war mir sicher, dass das gestern noch funktioniert hat.
>Aber jetzt geht es tatsächlich nicht mehr. Ich hatte mich gestern auch
>noch über "\n" vs "$" gewundert, aber gedacht, es macht keinen
>Unterschied.
>
>Wobei mein erstes Testscript so aussah:
>,----
>| { if($0~"2006$"){
>| getline nextline
>| $0=$0 nextline
>| }
>| print $0
>| }
>`----
>
>Und das funktioniert immer noch.
Aber wohl anders als von dir gedacht ;)
Nehmen wir die 4 Zeilen, die ich schonmal verwendete:
1: bla 2006
2: , 123, 45
3: blubb; 2006
4: , 97, asd
Was macht dann dein script?
Zeile 1:
- Muster ("leer") passt. Block wird ausgeführt.
- if-Bedingung passt (im Ggs. zur Bedingung '/2006\n/')
- lies Zeile 2 in 'nextline', wobei durch getline der globale
"Zeiger" zur naechsten Zeile (3) wandert (s.u.)
- haenge nextline (ohne Umbruch) an Zeile 1 (in $0) an
- gebe $0 (Zeile 1+2) aus
Zeile 3: (die wg. dem getline von Zeile 2 dran ist)
- dito
Was macht die andere Variante?
Zeile 1:
- Muster ("leer") passt. Block wird ausgeführt.
- if-Bedingung passt NICHT!
- gebe $0 (Zeile 1) aus
Zeile 2 - n:
- dito
Warum hast du überhaupt mit dem leeren Muster angefangen...? ;)
Bei sed gilt übrigens ähnliches bzgl. Adressierung.
$ echo 'bla 2006
, 123, 45
bla
blubb; 2006
, 97, asd
' | sed -n '/2006$/{N;s/2006\
/2006/;};p'
HTH,
-dnh
--
Ich dagge° also bin Ich! [WoKo in dag°]
Reply to: