Re: Grep und regex
Am Freitag, 7. November 2003 21:56 schrieb Thorsten Haude:
> * Jan Trippler <Jan.Trippler@t-online.de> [2003-11-07 21:24]:
> >Das Problem ist weniger das Finden als das Finden der gesuchten PID.
> > Da kommt auch die Stellenzahl der PID ins Spiel: Wenn Du z. B. nach
> > der PID 3 mit Deiner Methode suchst, kriegst Du wohl noch ein paar
> > mehr unzutreffende Treffer.
>
> Weil die 3 nur eine Stelle hat?
Ja, weil es PIDs gibt, die 2-, 3- oder 4-stellig sind und auch ne 3
beinhalten.
> Klar, an PPIDs hatte ich nicht gedacht, aber um n-stellige Zahlen
> geht's trotzdem nicht.
Hast Du es denn mal ausprobiert? Natürlich gehts darum:
jan@pennywise:~$ cat pid
3
jan@pennywise:~$ ps -ef | grep `cat pid`
root 3 1 0 17:20 ? 00:00:00 [kupdate]
daemon 113 1 0 17:21 ? 00:00:00 /sbin/portmap
...
274 ? S 0:00 /usr/sbin/rpc.mountd --no-nfs-version 3
...
Merkst Du was?
Die eleganteste Möglichkeit ist die -p Option des ps, aber wenn man das
nicht will (oder kann - z. B. wenn man aus irgend einem Grund nur die
BSD-Optionen zur Verfügung hat), muss man mit grep & Co. arbeiten. Und
dann kriegt man die betreffende Zeile nur raus, wenn man
berücksichtigt, dass die PIDs (mit BSD-Optionen) rechtsbündig mit
führenden Leerzeichen in der 1. Spalte stehen. Man _muss_ auf die erste
Spalte greppen, sonst kriegt man nämlich Zeilen, die überhaupt nix mit
der gesuchten PID zu tun haben - siehe oben. Das Problem des OP bestand
ja gerade darin, dass er die PID am Zeilenanfang gesucht hat und
plötzlich (nämlich dann, wenn die 1. 5-stellige PID in der Prozessliste
auftaucht) die 4-stelligen nicht mehr links am Zeilenanfang stehen,
sondern ein Leerzeichen davor sitzt.
Jan
Reply to: