grep -v“grep”的含义和作用是什么?

grep -v“grep”的含义和作用是什么?

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

答案1

grep -v "grep"逐行输入,并仅输出grep未出现的行。如果没有-v,它将仅输出grep 出现。请参阅man grep了解详情。

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

grep -v grep(或grep -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

我的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

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

[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
  • -a 节目完整命令行。省略它则仅显示进程 ID 号。
  • -f 搜索在完整命令行中。省略它则仅搜索名称。

答案2

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

-v, --invert-match        select non-matching lines

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

$ grep -v bar /path/to/file

阅读更多...

相关内容