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

Re: Frage zu grep



On 2006-09-15 21:38:43 +0200, Ulrich Fürst wrote:
> Tschuldigung, wenn ich doch noch mal nachhake!
> 
> 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!? 
> Was ich verstehe, ist warum der grep Prozeß selbst rausfliegt. Was ich
> nicht verstehe ist warum überhaupt noch ein Prozeß angezeigt wird, wenn
> ich eine der beiden eckigen Klammern oder auch beide escape.

Das hat mit dem Escaping von der Bash zu tun. Die Bash interpretiert das
\ selber und übergibt nur nur [s]ylpheed als Pattern an grep. Das sieht
man wunderbar wenn man den grep Aufruf auch ausgibt: \| ist die
Oder-Verknüpfung bei den basic-Regex. Damit wir das \| an der Bash
vorbeikriegen müssen wir es auch escapen:
ps aux | grep \[s\]ylpheed\\\|grep
(eventuell mehrmals wiederholen bis der grep Aufruf auch auftaucht).
Um ein \[ an grep zu übergeben, muss es escaped werden:
ps aux | grep \\[s\\]ylpheed\\\|grep
oder in " eingeschlossen werden:
ps aux | grep "\[s\]ylpheed\|grep"

Michael



Reply to: