是否有一个易于记忆的经验法则来了解以下之间的区别:
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 -P
PCRE(或perl
-like,另见pcregrep
PCRE 库附带的命令),grep -X
对于增强的正则表达式......
不同系统支持的运营商列表grep
也grep -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压缩文件。只要您可以访问相应的工具,您就可以对任何其他压缩格式执行相同的操作。