[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: