In realtà awk è esattamente lo strumento che dovresti esaminare:
ps axu | grep '[j]boss' | awk '{print $5}'
oppure puoi abbandonare il grep del tutto dal awk conosce le espressioni regolari:
ps axu | awk '/[j]boss/ {print $5}'
Ma se, per qualche bizzarra ragione, davvero non puoi usa awk , ci sono altre cose più semplici che puoi fare, come comprimere prima tutti gli spazi bianchi in un unico spazio:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
Quel grep trucco, tra l'altro, è un modo accurato per ottenere solo il jboss processi e non il grep jboss uno (idem per il awk variante pure).
L'grep process avrà un letterale grep [j]boss nel suo comando process quindi non verrà catturato dal grep stesso, che sta cercando la classe di caratteri [j] seguito da boss .
Questo è un modo ingegnoso per evitare il | grep xyz | grep -v grep paradigma che alcune persone usano.
awk version è probabilmente il modo migliore per procedere, ma puoi anche usare cut se prima stringi le ripetizioni con tr :
ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
# ^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^
# | | |
# | | get 5th field
# | |
# | squeeze spaces
# |
# avoid grep itself to appear in the list
Mi piace usare il comando tr -s per questo
ps aux | tr -s [:blank:] | cut -d' ' -f3
Questo comprime tutti gli spazi bianchi fino a 1 spazio. In questo modo dire a cut di utilizzare uno spazio come delimitatore viene onorato come previsto.