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.