zgrep 与 egrep 与 grep

zgrep 与 egrep 与 grep

是否有一个易于记住的经验法则来了解以下之间的区别:

  • egrep

  • zgrep

  • grep

并知道我的机器上安装了哪些?

(确实似乎有一些:“如果安装了GNU grep,那么......,否则......”)

答案1

zgrep通常是一个附带的脚本gzip(另见下面 Stephen Kitt 的评论),它grep被压缩成压缩文件(具有gzip可识别的压缩格式)。这z是为了zip(不适用于 pkzip 压缩存档格式,而是用于文件的压缩/压缩)。

egrep是 70 年代末在 Unix V7 中引入的命令,与旧命令相比,它具有新的正则表达式算法和语法grep(本身是一个独立的命令,用于实现g/re/p古代ed文本编辑器的命令)。这就是grep对于e扩展正则表达式 (ERE),而不是基本正则表达式(BRE )理解为grep// sed/ edvi

其他运算符(如\{和 )\<后来被添加到 的一些实现中,grep但在某些方面没有egrep做出更多贡献grep扩展egrep

在 90 年代初,POSIX 尝试将egrep和统一grep为单个命令(wheregrep -E意味着执行操作egrep),并使{min,max}ERE 中的运算符等同于的 RE\{min,max\}中的操作符grep(因此不向后兼容egrep)。它还指定了-F选项F固定串搜索替换fgrep实用程序。

今天,egrep不是标准命令(也不是fgrep)。虽然大多数系统都有一个,但有些实现可以识别{min,max}操作员,有些则不能。

grep并且grep -E是标准的。某些grep实现具有额外的开关来识别更多不同的正则表达式语法,例如grep -PPCRE(或perl类似,另请参阅pcregrepPCRE 库附带的命令),grep -X例如增强正则表达式...

不同系统所支持的运营商列表grep也有所不同。grep -E为了可移植性,限制为 POSIX 指定的列表。

在 Solaris 上,请确保使用/usr/xpg4/bin/grep.中的一项/bin不符合 POSIX 标准。

各种压缩库/工具提供zgrepbzgrepxzgrep脚本,但没有一个标准。

POSIX 指定的唯一压缩程序是compress/uncompress这是 80 年代初的一种古老的压缩格式,现在没有人再使用了。

gzip(GNU zip) 理解另一种古老的压缩格式,该格式至今仍在使用,并且gzip在大多数系统上都可以找到(GNU 实现或克隆)。所以你应该能够做到:

gzip -d < file.gz | grep BRE

或者:

gzip -d < file.gz | grep -E ERE

grepgzip 压缩文件中。只要您有权访问相应的工具,您就可以对任何其他压缩格式执行相同的操作。

相关内容