"grep -v"でスペースを含む文字列を除外する方法

"grep -v"でスペースを含む文字列を除外する方法

を使用して実行中のスクリプトがあり、bash -cそのスクリプトを使用して実行されているプロセスの数を知りたいです。

$ ps ax | grep my_script_run | grep -v grep | grep -v "bash -c"
11121 ?        S      0:00 bash -c export PATH="/opt/rbenv/bin:$PATH"; ruby my_script_run.rb
11173 ?        Rl    19:38 ruby my_script_run.rb

どういうわけか、上記のコマンドはbash -c文字列を除外しません。

$ ps ax | grep my_script_run | grep -v grep | grep -v bash
11173 ?        Rl    19:42 ruby my_script_run.rb

bash -cこのコマンドはうまく機能しますが、それ自体ではなくそのコマンドを除外したいと思いますbash。最初のコマンドはなぜ除外されないのですかbash -c?どうすれば正しく除外できますか?

編集する

wc -l次回使うものを書くのを忘れてしまいました。grep

答え1

何について

ps ax | grep -c [m]y_script_run

2つのプロセスで計算する必要があります。

または

\ps ax  | \grep  '[m]y_script_run' | \grep -v 'bash -c' -c

どこで(編集)

  • -c行を数える
  • [m]y_script_rungrepの正規表現のトリックですが、my_script_runそれ自体ではありません。 (欠点は固定文字列でのみ機能します${myvar}。@ G-Manに感謝します。この文字列を引用する必要があります。

  • \psunalias \grepgrep と ps (もしそうなら)

答え2

避けるgrep-cオプションと見なされ、その一部にはほとんど方法がありません。

  1. grep -v -- 'bash -c'
  2. grep -v 'bash \-c'

関連情報