![这个 grep 的正则表达式 `[c]ron` 和 `cron` 意思一样吗?](https://linux22.com/image/105580/%E8%BF%99%E4%B8%AA%20grep%20%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%20%60%5Bc%5Dron%60%20%E5%92%8C%20%60cron%60%20%E6%84%8F%E6%80%9D%E4%B8%80%E6%A0%B7%E5%90%97%EF%BC%9F%20.png)
来自 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 作业进程。