Am Freitag, 15. September 2006 21:38 schrieb Ulrich Fürst:
> Michael Bienia <[EMAIL PROTECTED]> wrote:
> > Die [] bezeichnen eine Zeichenklasse, d.h. eins der angegebenen
> > Zeichen. In unserem Fall steht nur ein Zeichen zur Auswahl: das p.
> > grep sucht also nach "ps", der grep Prozess selber wird aber als
> > "grep [p]s" gelistet, wo das ps nicht mehr matcht.
>
> Dann dürfte er aber doch, wenn man beide Klammern escaped auch das
> eigentlich zu findende nicht mehr finden!?
> Warum funktioniert also:
> ps aux | grep \[s\]ylpheed
>
> Dazu müsste es ja einen Prozeß geben, in dem "[s]ylpheed" (nicht als
> regex) genau so drin vorkommt. Der Prozeß heißt aber "sylpheed" und
> wird trotzdem angezeigt!?

Das liegt daran, dass bei Deinem Aufruf die beiden Backslashes schon von 
der bash entfernt werden, so dass der Parameter, der tatschlich bei 
grep ankommt, »[s]ylpheed« (ohne die Anführungszeichen) lautet und grep 
die eckigen Klammern als »bracket expression« behandelt. Wenn Du 
willst, dass die Backslashes Teil des regulären Ausdrucks sind, 
probier's mal so:

ps aux | grep '\[s\]ylpheed'

So werden tatsächlich nur noch Zeilen ausgegeben, die die 
Zeichenkette »[s]ylpheed« (also mit eckigen Klammern) beinhalten.

Viele Grüße, Ole

Antwort per Email an