这个 grep 的正则表达式 `[c]ron` 和 `cron` 意思一样吗?

这个 grep 的正则表达式 `[c]ron` 和 `cron` 意思一样吗?

来自 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 作业进程。

相关内容