web-dev-qa-db-fra.com

Utiliser bash ps et couper ensemble

J'ai besoin d'extraire les champs PID, UID et de commande de 'ps' et je l'ai essayé comme ceci:

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

Pour une raison quelconque, cela se comporte car il n'y a aucune commande de coupure. Il renvoie juste une sortie ps normale. Ensuite, j'ai essayé

ps -L u n | tr -s " " | cut -d " " -f 1,2,13 et cela renvoie un non-sens total. Ensuite, j'ai essayé de jouer avec et avec ça:

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

et cela retourne en quelque sorte ce dont j'ai besoin (presque, et je ne comprends pas pourquoi cela fonctionne presque), sauf qu'il coupe le champ de commande au milieu. Comment puis-je obtenir ce dont j'ai besoin?

28
darxsys

ps imprime les séparateurs d'espace, mais cut sans -d utilise le caractère de tabulation. Le tr -s serre les espaces ensemble pour obtenir plus de séparation que vous voulez, mais rappelez-vous qu'il y a le jeu initial d'espaces (réduit à un), c'est pourquoi vous devez ajouter 1 à chaque champ. En outre, il existe des espaces dans les commandes pour chaque mot. Cela devrait fonctionner:

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

Y a-t-il une raison particulière d'utiliser la coupe?

Je suppose que cela fera ce que vous voulez:

ps -eopid,uid,cmd
14
Sylvain Kalache

Vous pouvez utiliser awk pour nettoyer votre commande, comme ceci:

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