Grep und regex
Hallo,
bin gerade ueber ein Problem mit meinen regular expressions bei grep
gestolpert. Wollte in der Ausgabe von ps nach einer bestimmten pid
suchen:
PROC=`cat pid`
ps ax | grep "^$PROC"
Das ganze funktionierte auch eine Weile -- bis auf einmal $PROC nur
vierstellig war. Da es auch fuenfstellige pids gab und die Ausgabe
rechtsbuendig ist (vor pid also white space war), wurde nichts mehr
gefunden.
"man grep" sagt, dass es bei extended regular expressions vordefinierte
Klassen von Zeichen gibt:
Finally, certain named classes of characters are predefined within
bracket expressions, as follows. Their names are self explanatory,
and they are [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:],
[:lower:], [:print:], [:punct:], [:space:], [:upper:], and
[:xdigit:].
Da das alles ja so schoen self explanatory sein sollte, habe ich aus
meiner urspruenglichen zeile folgendes gemacht:
ps ax | grep -E "^[:space:]*$PROC"
Leider funktioniert das nicht. In diesem Fall hat zwar letztlich
ps ax | grep "^[ ]*$PROC"
zum gewuenschten Resultat gefuehrt, aber ein bisschen verwundert bin
ich doch. Probleme mit dieser Vorgehensweise koennte ich mir
vorstellen, wenn nicht nur Leerzeichen, sondern auch Tabulatoren
gefunden werden sollen. Ich weiss nun nicht, ob das in der shell
ueberhaupt relevant ist; zumindest bei PERL wurde sehr wohl zwischen
verschiedenen Arten von white space unterschieden.
Falls mich jemand erleuchten koennte, wuerde ich mich sehr freuen.
Schoenen Gruss,
Andreas
Reply to: