来自 grep 手册
ps -ef | grep ’[c]ron’
如果编写的模式没有方括号,那么它不仅会匹配 cron 的 ps 输出行,还会匹配 grep 的 ps 输出行。请注意,在某些平台上,ps 将输出限制为屏幕宽度; grep 除了可用内存之外,对行的长度没有任何限制
与[c]ron
的含义不同cron
,因为[c]
表示一组替代字符?
为什么它与 grep 的 ps 输出行不匹配?
谢谢。
答案1
就正则表达式而言,它们是相同的。
ps
当您使用括号时, for line的输出grep
将是:
ps -ef | grep [c]ron
该文本将被输入grep
标准输入,grep
尝试搜索cron
该行中未包含的文本,因此该行不匹配。
如果没有括号,该行包含 text cron
,因此它匹配。
答案2
在 grep '[c]ron' 的情况下,ps 输出将包含文字 '[' 'c' ']' 'r' 'o' 'n' 因此 grep '[c]ron' 将无法匹配grep 命令,同时仍然匹配正在运行的 cron 作业进程。
在 grep 'cron' 的情况下,ps 输出包含文字 'c' 'r' 'o' 'n',因此 grep 'cron' 将匹配其自身、grep 进程,并且无论如何也匹配 cron 作业进程。