実は awk 正確です 調べるべきツール:
ps axu | grep '[j]boss' | awk '{print $5}'
または、grep を捨てることができます awk以降は完全に 正規表現について知っている:
ps axu | awk '/[j]boss/ {print $5}'
しかし、何らかの奇妙な理由で、本当にできない場合は awk を使用 、最初にすべての空白を単一のスペースに折りたたむなど、他にも簡単にできることがあります:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
その grep ところで、トリックは jboss のみを取得するための巧妙な方法です プロセスであり、grep jboss ではありません 1 つ (awk も同様) バリアントも同様です)。
grep プロセスにはリテラル grep [j]boss があります そのプロセス コマンドで、grep によってキャッチされません。 文字クラス [j] を探しているそれ自体 続いて boss .
これは | grep xyz | grep -v grep を回避するための気の利いた方法です 一部の人々が使用するパラダイム。
awk バージョンがおそらく最善の方法ですが、 cut を使用することもできます 最初に tr で繰り返しを絞り込む場合 :
ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
# ^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^
# | | |
# | | get 5th field
# | |
# | squeeze spaces
# |
# avoid grep itself to appear in the list
これには tr -s コマンドを使用するのが好きです
ps aux | tr -s [:blank:] | cut -d' ' -f3
これにより、すべての空白が 1 スペースに縮小されます。このように、スペースを区切り文字として使用するようにカットに指示することは、期待どおりに受け入れられます。