Thread perl one liner : suche string und ausgabe wert (9 answers)
Opened by bora99 at 2013-07-15 22:25

clms
 2013-07-15 23:22
#168882 #168882
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2013-07-15T20:25:27 bora99
hallo,

ich versuche in einer datei nach einem string zu suchen und nach trennung durch "=" den wert auszugeben. zwischen "=" können <tab>s oder <blank>s sein.
der länge des wertes ist 4 stellig. nach dem wert können auch kommentare durch "#" getrennt stehen.

bsp: ( im anhang )

die ersten 3 einträge ( suche nach "key" und ausgabe von SID* ) sollen gefunden werden. Nach "SID1" ist ein Leerzeichen

key = SID0
key = SID1
key = SID2 # kommentar, soll gefunden und ausgegeben werden
key = SID33 # kommentar, soll nicht gefunden und nicht ausgegeben werden

was ich nicht schaffe, SID33 rauszufiltern.

perl -lan -e 'if(/^([\s]*)key[\s]+=[\s]([A-Z0-9]{4})[\s]*$|[\s][\W]*$/i) {print "$F[2]" }' test.txt

Die -a Option macht hier IMHO keinen Sinn.
Außerdem verstehe ich nicht, warum Du die \s in eckige Klammern gepackt hast.
"SID33" kannst du rausfiltern indem Du nach [A-Z0-9]{4} mit \b eine "word boundary" verlangst.

Ich würde es so schreiben (ungetestet):
perl -len 'print $1 if /^\s*key\s+=\s+([A-Z0-9]{4})\b/'

View full thread perl one liner : suche string und ausgabe wert