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

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: