grep -v "grep"
逐行输入,仅输出grep
未出现的行。没有-v
,它将仅输出grep
确实出现的行。有关man grep
详细信息,请参见。
就grep
实用程序本身而言,grep
作为参数传递给它的模式与其名称相同并不重要。但是在大多数grep -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
grep
不-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
在完整的命令行中搜索。忽略它仅搜索名称。
man grep
阅读该命令的参考手册页,也可以阅读有关某些命令(包括grep)的更多信息info grep
。您的系统中的文档通常非常方便。