为什么grepping ps rocess_name从结果中排除grep

一个很酷的技巧可以让你不必在使用ps命令输出时使用grep -v(是的,我知道pgrep的存在)就是把进程的第一个字母放到像ps -ef |grep [s]vn这样的字符类中。 这将排除grep svn被包括在输出中。 为什么这个工作? GNU grep。

grep正在寻找一个正则expression式,例如[Pp]rocess会findProcessprocess ,但是一个有趣的副作用是grep操作的命令行中有一个] ,这意味着grep行不会' t包含单词process ,它包含单词p]rocess ,它不匹配。

所以有效地,你通过把闭括号放在那里去除grep行中的文字process ,但仍然允许它匹配其他行上的单词。

方括号是grep模式匹配的一部分。 基本上grep得到基本的正则expression式:

[12p]过程将扩展到:1过程2过程

现在,grep实际上会search[1]rocess [2]rocess [p]rocess ,正如你所看到的 – 这不是process

方括号是正则expression式中匹配的字符类。 您可以在这里阅读更多有关调节expression式和字符匹配的内容:

http://www.regular-expressions.info/charclass.html