En fait awk est exactement l'outil que vous devriez rechercher :
ps axu | grep '[j]boss' | awk '{print $5}'
ou vous pouvez abandonner le grep au total depuis awk connaît les expressions régulières :
ps axu | awk '/[j]boss/ {print $5}'
Mais si, pour une raison bizarre, vous ne pouvez vraiment pas utilisez awk , vous pouvez faire d'autres choses plus simples, comme réduire d'abord tous les espaces en un seul espace :
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
Ce grep l'astuce, soit dit en passant, est un moyen astucieux d'obtenir uniquement le jboss processus et non le grep jboss un (idem pour le awk variante également).
Le grep processus aura un littéral grep [j]boss dans sa commande process donc ne sera pas attrapé par le grep lui-même, qui recherche la classe de caractères [j] suivi de boss .
C'est un moyen astucieux d'éviter le | grep xyz | grep -v grep paradigme que certaines personnes utilisent.
awk version est probablement la meilleure solution, mais vous pouvez également utiliser cut si vous pressez d'abord les répétitions avec tr :
ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
# ^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^
# | | |
# | | get 5th field
# | |
# | squeeze spaces
# |
# avoid grep itself to appear in the list
J'aime utiliser la commande tr -s pour cela
ps aux | tr -s [:blank:] | cut -d' ' -f3
Cela réduit tous les espaces blancs à 1 espace. De cette façon, dire à cut d'utiliser un espace comme délimiteur est honoré comme prévu.