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.