2013-07-15T20:25:27
bora99hallo,
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/'