Re: Frage zu grep
Am Freitag, 15. September 2006 21:38 schrieb Ulrich Fürst:
> Michael Bienia <michael@vorlon.ping.de> 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
Reply to: