为什么 grepping ps [p]rocess_name 会从结果中排除 grep

为什么 grepping ps [p]rocess_name 会从结果中排除 grep

一个很酷的技巧可以让你不必在 grep ps 输出时使用 grep -v(是的,我知道 pgrep 存在),那就是将进程的首字母放入字符类中,如ps -ef |grep [s]vn。这将排除grep svn包含在输出中。为什么这样做有效?GNU grep。

答案1

Grep 正在搜索正则表达式,因此例如[Pp]rocess会找到Processprocess,但一个有趣的副作用是 grep 操作的命令行]中卡住了 ,这意味着 grep 行不包含单词process,它包含单词p]rocess,这不匹配。

因此,您可以通过在 grep 行中放置右括号来有效地删除该单词process,但仍允许它匹配其他行上的单词。

答案2

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

[12p]进程将扩展为:1进程 2进程

现在,grep 实际上会搜索[1]rocess [2]rocess [p]rocess— — 正如您所见 — — 它不是process

方括号是正则表达式中的字符类匹配。您可以在此处阅读有关正则表达式和字符匹配的更多信息:

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

相关内容