Forum: PC-Programmierung awk: Kann ich den matchstring direkt ausgeben?


von Daniel (root) (Gast)


Lesenswert?

Hallo,

gegeben folgende Zeile

abcd1234xyz

ich will nur den Matchstring herausholen: zB 1234
1
cat myfile | awk '/[0-9]*/{print ???}'

normalerweise würde awk im matchfall die ganze Zeile ausgeben.
ich will aber nur die gematchte untermenge der Zeile.
wer weiss wie es geht?

yalu? :)

von Hc Z. (mizch)


Lesenswert?

1
 awk '{if (match($0, /[0-9]+/, result)) print result[0]}' myfile

Das '*' durch '+' ersetzt.  Sonst hast Du immer einen Match, auch wenn 
er meistens leer ist.

Edit: UUOC entfernt.

von Klaus W. (mfgkw)


Lesenswert?

mein match hat keine 3 Parameter.
Ich will auch den dritten haben!

von Daniel (root) (Gast)


Lesenswert?

Danke für die schnelle Antwort mizch

von Daniel (root) (Gast)


Lesenswert?

meiner hat :)
1
$ awk --version
2
GNU Awk 3.1.6
3
Copyright (C) 1989, 1991-2007 Free Software Foundation.

unter cygwin

von Hc Z. (mizch)


Lesenswert?

Klaus Wachtler schrieb:
> mein match hat keine 3 Parameter.
> Ich will auch den dritten haben!

Der ist in den Standards POSIX/SUSv4 nicht vorgeschrieben, sondern eine 
GNU-Erweiterung.  Ich ging bei meiner Antwort davon aus, dass GNU awk 
vorhanden ist (der ist doch auch bei WinAVR dabei, oder?)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.