我想知道这grep -v "grep"
是什么意思?
答案1
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
without-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
(阅读更多...)