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