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.