Eigentlich awk
ist genau das Tool, das Sie sich ansehen sollten:
ps axu | grep '[j]boss' | awk '{print $5}'
oder Sie können die grep
fallen lassen insgesamt seit awk
kennt sich mit regulären Ausdrücken aus:
ps axu | awk '/[j]boss/ {print $5}'
Aber wenn Sie aus irgendeinem bizarren Grund wirklich nicht können Verwenden Sie awk
, gibt es andere einfachere Dinge, die Sie tun können, wie z. B. zunächst alle Leerzeichen auf ein einziges Leerzeichen reduzieren:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
Diese grep
Trick ist übrigens ein netter Weg, um nur den jboss
zu bekommen Prozesse und nicht die grep jboss
eins (dito für awk
Variante).
Die grep
Der Prozess hat einen wörtlichen grep [j]boss
in seinem Verarbeitungsbefehl wird also nicht von grep
abgefangen selbst, die nach der Zeichenklasse [j]
sucht gefolgt von boss
.
Dies ist ein raffinierter Weg, um | grep xyz | grep -v grep
zu vermeiden Paradigma, das einige Leute verwenden.
awk
Version ist wahrscheinlich der beste Weg, aber Sie können auch cut
verwenden wenn Sie zuerst die Wiederholungen mit tr
drücken :
ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
# ^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^
# | | |
# | | get 5th field
# | |
# | squeeze spaces
# |
# avoid grep itself to appear in the list
Ich verwende dafür gerne den Befehl tr -s
ps aux | tr -s [:blank:] | cut -d' ' -f3
Dadurch werden alle Leerzeichen auf 1 Leerzeichen komprimiert. Auf diese Weise wird die Anweisung an cut, ein Leerzeichen als Trennzeichen zu verwenden, wie erwartet berücksichtigt.