実は 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 スペースに縮小されます。このように、スペースを区切り文字として使用するようにカットに指示することは、期待どおりに受け入れられます。