En realidad awk
es exactamente la herramienta que debería estar buscando:
ps axu | grep '[j]boss' | awk '{print $5}'
o puedes deshacerte del grep
en total desde awk
sabe sobre expresiones regulares:
ps axu | awk '/[j]boss/ {print $5}'
Pero si, por alguna extraña razón, realmente no puedes usa awk
, hay otras cosas más simples que puede hacer, como colapsar todos los espacios en blanco en un solo espacio primero:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
Ese grep
el truco, por cierto, es una buena manera de obtener solo el jboss
procesos y no el grep jboss
uno (lo mismo para el awk
variante también).
El grep
proceso tendrá un literal grep [j]boss
en su comando de proceso, por lo que no será capturado por el grep
en sí mismo, que busca la clase de carácter [j]
seguido de boss
.
Esta es una forma ingeniosa de evitar el | grep xyz | grep -v grep
paradigma que algunas personas usan.
awk
La versión es probablemente la mejor manera de hacerlo, pero también puede usar cut
si primero aprietas las repeticiones 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
Me gusta usar el comando tr -s para esto
ps aux | tr -s [:blank:] | cut -d' ' -f3
Esto reduce todos los espacios en blanco a 1 espacio. De esta manera, decirle a cut que use un espacio como delimitador se cumple como se esperaba.