2013-03-26 26 views
18

ho bisogno di estrarre PID, campi UID e di comando da 'ps' e ho provato in questo modo:Utilizzando bash ps e tagliare insieme

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

Per qualche ragione, questo si comporta come non c'è comando di taglio qualunque. Restituisce solo la normale uscita ps. Poi, ho provato

ps -L u n | tr -s " " | cut -d " " -f 1,2,13 e questo restituisce un assurdità totale. Poi, ho provato a giocare con essa e con questo:

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

e questo in qualche modo restituisce quello che mi serve (quasi, e non capisco il motivo per cui che quasi funziona), tranne che taglia fuori il campo del comando nel mezzo di esso. Come posso ottenere ciò di cui ho bisogno?

risposta

33

ps è la stampa di separatori di spazio, ma senza cut-d utilizza il carattere di tabulazione. Lo tr -s stringe gli spazi insieme per ottenere più della separazione che si desidera, ma ricorda che c'è l'insieme iniziale di spazi (schiacciato a uno), quindi perché è necessario aggiungere 1 a ciascun campo. Inoltre, ci sono spazi nei comandi per ogni parola. Questo dovrebbe funzionare:

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

C'è qualche motivo particolare per l'utilizzo del taglio?

Credo che questo farà ciò che si vuole:

ps -eopid,uid,cmd 
+0

Sono solo un principiante in modo da cercare quello che penso. Avrebbe dovuto leggere le pagine man in modo più dettagliato. Grazie – darxsys

+0

Non tutti i Unix forniscono queste opzioni a 'ps', mentre ogni Unix fornisce' cut'. – sfstewman

+0

Sia '-e' che' -o' sono specificati da POSIX. [Le specifiche] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ps.html) menziona alcune delle difficoltà di standardizzazione di 'ps' date le grandi differenze tra le implementazioni preesistenti di BSD e System V . – chepner

11

È possibile utilizzare awk per ripulire il vostro comando, in questo modo:

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