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

Re: Frage zu grep



Michael Bienia <michael@vorlon.ping.de> wrote:
> 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
O.k. jetzt hab' ich's auch kapiert; Danke Euch beiden!

Ulrich
Späte Antwort wg. Urlaub... Desderwegen auch der Full-Quote




Reply to: