为什么当我在每个后半部分将grep更改为egrep时,得到了不同的答案?

8 浏览
0 Comments

为什么当我在每个后半部分将grep更改为egrep时,得到了不同的答案?

为什么我在后半部分将grep改为egrep后得到了不同的答案?

grepegrep之间有什么区别?

0
0 Comments

当我将grep改为egrep后,我得到了不同的答案。为什么会这样呢?原因是在egrep中,|是元字符,而在普通的grep中,它是一个普通字符。

egrep中的|F$表示匹配空字符串或以F结尾的字符串,因此它在每一行都找到了空字符串。

而在grep中,相同的表达式表示在行尾匹配|F。如果要在egrep中查找该表达式,需要使用反斜杠对元字符进行转义:grep -E '\|F$' enrolments

简而言之,普通的grep命令理解基本正则表达式(BRE),而egrep或扩展的grep命令理解扩展正则表达式(ERE)。某些版本的grep(如GNU的grep)可以编译为识别Perl兼容的正则表达式(PCRE)。

为什么我们更喜欢使用grep -E而不是egrep呢?是因为egrep可能会在未来被弃用吗?我可以看到使用统一二进制文件有一些优点,就像人们使用busybox的原因一样;但还有其他原因吗?比如代码规范化?

是的,egrep在POSIX中已经不再被记录。在同一页面的解释中说:这个grep已经以向上兼容的方式进行了增强,以提供与历史egrepfgrep命令完全一样的功能。标准开发者明确意图将这三个grep命令合并为一个单一的命令。旧的egrepfgrep命令可能会作为实现扩展继续支持很多年,以允许历史应用程序运行不受修改。

0