Michael Bienia <[EMAIL PROTECTED]> wrote: > On 2006-09-15 21:38:43 +0200, Ulrich Fürst wrote: > > Tschuldigung, wenn ich doch noch mal nachhake! > > > > 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!? > > 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

