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 -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

