如何通过“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_run是 grep 的正则表达式技巧my_script_run,但不是其本身。 (缺点是它只适用于固定字符串,不适用于${myvar})。感谢@G-Man 这个字符串应该被引用。

  • \ps\grepunalias grep 和 ps (以防万一)

答案2

避免grep视为-c一种选择,其中一些方法很少

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

相关内容