2013-03-26 8 views
18

I PID extrahieren müssen, UID und Befehlsfelder von ‚ps‘ und ich habe es so versucht:Mit bash ps und schneiden zusammen

ps -L u n | cut -f 1,2,13

Aus irgendeinem Grund verhält sich dies, da es keine ist Schneide den Befehl aus. Es gibt nur normale ps-Ausgabe zurück. Dann versuchte ich

ps -L u n | tr -s " " | cut -d " " -f 1,2,13 und das ergibt totalen Unsinn. Dann habe ich versucht, mit ihm zu spielen und mit diesem:

ps -L u n | tr -s " " | cut -d " " -f 2,3,14

und diese wieder irgendwie, was ich brauche (fast, und ich verstehe nicht, warum, dass fast funktioniert), mit der Ausnahme, dass es das Befehlsfeld schneidet mittendrin. Wie kann ich bekommen, was ich brauche?

Antwort

33

ps druckt aus Raum Separatoren, aber cut ohne -d verwendet das Tab-Zeichen. Die tr -s drückt die Leerzeichen zusammen, um mehr von der gewünschten Trennung zu erhalten, aber denken Sie daran, dass es die erste Menge von Leerzeichen gibt (auf eins gequetscht), weshalb Sie jedem Feld 1 hinzufügen müssen. Außerdem gibt es Leerzeichen in den Befehlen für jedes Wort. Dies sollte funktionieren:

ps -L u n | tr -s " " | cut -d " " -f 2,3,14- 
12

Gibt es einen bestimmten Grund für die Verwendung von Schnitt?

Ich denke, das tun, was Sie wollen:

ps -eopid,uid,cmd 
+0

Ich bin nur ein Anfänger so versuchen, was ich mir vorstellen. Sollte die Manpages genauer gelesen haben. Danke – darxsys

+0

Nicht jedes Unix stellt diese Optionen für 'ps' bereit, während jedes Unix' cut' liefert. – sfstewman

+0

Sowohl -e' als auch -o' werden von POSIX angegeben. [Die Spezifikation] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ps.html) erwähnt einige der Schwierigkeiten bei der Standardisierung von "ps" angesichts der großen Unterschiede zwischen den bereits existierenden BSD- und System V-Implementierungen . – chepner

11

Sie awk verwenden können Ihren Befehl, um aufzuräumen, etwa so:

ps -L u n | awk '{ print $1,$2,$13 }'