grep -v "grep" 是什么意思?

Joe*_*Joe 26 bash grep

我想知道是grep -v "grep"什么意思?

Eli*_*gan 74

grep -v "grep"逐行输入,只输出grep没有出现的行。如果没有-v,就只输出线中grep 出现。详情请参阅man grep

grep实用程序本身而言,grep作为参数传递给它的模式与其名称相同并不重要。但在大多数grep -v grep实际出现的情况下,这并非巧合。

grep -v grep(orgrep -v 'grep'grep -v "grep") 通常出现在管道的右侧,管道的左侧是ps命令。这很可能是你见过的地方。例如,我可能正在寻找名称、路径或命令行参数表明它们与 Xfce 相关的正在运行的程序:

ek@Io:~$ ps x | grep xfce
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
31901 pts/1    S+     0:00 grep --color=auto xfce
Run Code Online (Sandbox Code Playgroud)

我的grep命令显示在输出中,但这不是我要找的。当我检查正在运行的内容时,我正在寻找有关已在运行的进程的信息,而不是仅由于我努力检查正在运行的内容而正在运行的进程的信息。

消除这种干扰的一种常见方法是添加另一个管道到grep -v grep

ek@Io:~$ ps x | grep xfce | grep -v grep
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
Run Code Online (Sandbox Code Playgroud)

grepwithout-F将其模式视为正则表达式而不是固定字符串。所以另一种方法是编写一个完全匹配xfce但写法不同的正则表达式。例如:

ek@Io:~$ ps x | grep '[x]fce'
 2955 ?        Ssl    0:10 xfce4-power-manager
 2958 ?        S      0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为[x]是一个与字母完全匹配的字符类x


这些流行方法的一个缺点是它们会过滤掉包含的行,grep即使它们不是grep您自己运行的命令。它们甚至可能不是grep命令——只是名称、路径或命令行参数包含 grep. 因此,正如Sergiy Kolodyazhnyy 指出的那样,通常这些方式(或任何其他涉及管道输出的方法ps)都不是真正理想的,而且正如Nic Hartley 提到的其他 方式经常使用pgrep. 例如:

ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
Run Code Online (Sandbox Code Playgroud)
  • -a 显示完整的命令行。省略它以仅显示进程 ID 号。
  • -f 在完整的命令行中搜索。省略它以仅搜索名称。

  • 可能还值得一提的是 `pgrep` 是 `ps | 的另一种替代方案。grep` (10认同)

Kar*_*lom 11

grep --help告诉我们-v标志的作用:

-v, --invert-match        select non-matching lines
Run Code Online (Sandbox Code Playgroud)

您可以使用-v标志来打印反转匹配;也就是说,它只匹配那些不包含给定单词的行。例如打印所有不包含单词 bar 的行:

$ grep -v bar /path/to/file
Run Code Online (Sandbox Code Playgroud)

阅读更多...