jff: geklammerte Zahl extrahieren

29/09/2008 - 17:18 von Andreas Leitgeb | Report spam
jff... just for fun

Aus einer Quelle (stdin) kommen Zeilen, die irgendwodrin eine
in Klammern eingeschlossene ganze Zahl enthalten, z.B:
blafasel: (42) blub blup^99 blarg ...
Es gibt nur eine oeffnende Klammer pro Zeile, und ebenso nur
eine schliessende und dazwischen nur 1 oder mehr Ziffern.
Ziffern kanns aber auch vor und nach der Klammer geben.

Mein Einstiegs-Angebot: (sozusagen als Referenz)
sed 's/.*(\([0-9]*\)).*/\1/'
(leere Klammern, und fuehrende Nullen kommen im input nicht vor)

Das muss doch noch *kuerzer* gehen... (Effizienz ist zweitrangig)

Alle standard-utilities erlaubt, z.B. sed, awk, cut, perl, ...
aber nur, was ohne konkrete vorbereitung geht: also kein
x
wo dann x a la x() { sed 's/.*(\([0-9]*\)).*/\1/'; }
definiert ist ...

any takers? :-)
 

Lesen sie die antworten

#1 Alexander Bartolich
29/09/2008 - 17:54 | Warnen spam
Andreas Leitgeb schrieb:
[...]
Mein Einstiegs-Angebot: (sozusagen als Referenz)
sed 's/.*(\([0-9]*\)).*/\1/'



perl '-ne/\((\d+)\)/&&print"$1"'

(leere Klammern, und fuehrende Nullen kommen im input nicht vor)



Die Perl-Variante akzeptiert nur nicht-leere Klammern.

Das Äquivalent von
\d+
in sed ist
[0-9]\{1,\}
und damit hàtten die zwei Lösungen gleich viele Zeichen.

usingwhitespaceisracism

Ähnliche fragen