zgrep 与 egrep 与 grep

Bas*_*asj 4 grep

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

  • egrep

  • zgrep

  • grep

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

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

Sté*_*las 14

zgrep通常是一个随附的脚本gzip(另请参见下面的 Stephen Kitt 的评论),该脚本包含grep在压缩文件中(具有可gzip识别的压缩格式)。该zž IP(不适用于PKZIP压缩存档格式,但对于文件的压缩和解/压缩)。

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

其他运营商喜欢\{\<后来加入的一些实现grep,但不egrep做出grep一些方面更延长egrep

在 90 年代初,POSIX 试图将egrep和统一grep为单个命令( wheregrep -E意味着做什么egrep)并使{min,max}ERE 中的运算符等同于\{min,max\}ingrep的 REs(因此不向后兼容egrep)。它还规定了-F对选项˚F ixed字符串搜索替换fgrep工具。

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

grep并且grep -E是标准的。一些grep实现有额外的开关来识别更多不同的正则表达式语法,比如grep -PPCRE(或perl-like,另见pcregrepPCRE 库附带的命令),grep -X对于增强的正则表达式......

不同系统支持的运营商列表grepgrep -E各不相同。为了可移植性,请限制为 POSIX 指定的列表。

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

各种压缩库/工具提供zgrep, bzgrep,xzgrep脚本,这些都不是标准的。

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

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

gzip -d < file.gz | grep BRE
Run Code Online (Sandbox Code Playgroud)

或者:

gzip -d < file.gz | grep -E ERE
Run Code Online (Sandbox Code Playgroud)

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