Ve skutečnosti awk
je přesně nástroj, který byste měli hledat:
ps axu | grep '[j]boss' | awk '{print $5}'
nebo se můžete zbavit grep
celkem od awk
ví o regulárních výrazech:
ps axu | awk '/[j]boss/ {print $5}'
Ale pokud z nějakého bizarního důvodu opravdu nemůžete použijte awk
, můžete udělat i další jednodušší věci, jako je nejprve sbalit všechny mezery na jediné místo:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
To grep
trik, mimochodem, je úhledný způsob, jak získat pouze jboss
procesy a ne grep jboss
jedna (stejně jako pro awk
také varianta).
grep
proces bude mít doslovný grep [j]boss
v příkazu procesu, takže nebude zachycen grep
sám, který hledá třídu znaků [j]
následuje boss
.
Toto je šikovný způsob, jak se vyhnout | grep xyz | grep -v grep
paradigma, které někteří lidé používají.
awk
verze je pravděpodobně nejlepší způsob, jak jít, ale můžete také použít cut
pokud nejprve stisknete opakování pomocí tr
:
ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
# ^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^
# | | |
# | | get 5th field
# | |
# | squeeze spaces
# |
# avoid grep itself to appear in the list
Rád k tomu používám příkaz tr -s
ps aux | tr -s [:blank:] | cut -d' ' -f3
Tím se všechna bílá místa zmenší na 1 místo. Tímto způsobem je podle očekávání respektováno použití mezery jako oddělovače.