是否有一个易于记住的经验法则来了解以下之间的区别:
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
/ ed
。vi
其他运算符(如\{
和 )\<
后来被添加到 的一些实现中,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 -P
PCRE(或perl
类似,另请参阅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
或者:
gzip -d < file.gz | grep -E ERE
到grep
gzip 压缩文件中。只要您有权访问相应的工具,您就可以对任何其他压缩格式执行相同的操作。