【发布时间】:2026-01-06 22:05:02
【问题描述】:
有人可以澄清这里发生的事情吗?
我有一个这样的文本文件:
$ more text3.txt
daaaaaad
dead
dad
dd
did
deed
drd
duuuurd
如果我在命令行上发出这个命令:
$ grep "^d[aei]\+d$" text3.txt
daaaaaad
dead
dad
did
deed
我得到了我期望的结果。如果我在第一个 grep 参数周围使用单引号,则相同。
如果我在+ 之前删除\,那么我不会从grep 得到任何结果。
让我感到困惑的是,在[aei] 之后,grep 对+ 会很好,它会将其解释为一个或多个先前的字符类。那么为什么我需要转义 + 字符呢?是不是因为bash有问题?
出于兴趣,我在 Windows 上使用 cmd.exe 得到了相同的行为。
【问题讨论】:
-
您应该始终使用
grep -E(或egrep),以便grep使用扩展正则表达式。这样您就不需要引用大多数特殊字符。 -
@ooga 感谢 -E / egrep 提示
-
值得注意——
man grep声称不推荐直接调用egrep(尽管仍然提供),并且还提供“匹配器选择”标志(例如-E切换)和各种其他值得阅读/浏览的信息。