egrep、fgrep 不应该是 grep 的别名吗?

egrep、fgrep 不应该是 grep 的别名吗?

由于 egrep 本质上是 grep -EI,因此可以认为它是一个使用该选项调用 grep 的别名。然而在我的系统上

file `which egrep`

显示它是可执行文件。另外,egrep 作为别名仅egrep使用颜色选项调用。为什么它不是别名?他们为 egrep 编译了单独的二进制文件吗?

只是好奇...

答案1

这取决于操作系统和安装的 grep 工具的版本。

以下是我碰巧可以访问的系统的一些示例:

  • Ubuntu 11.04,GNU grep 2.6.3:/bin/grep、/bin/fgrep 和 /bin/egrep 是三个大小不同的可执行文件。

  • GNU grep 2.10(几天前刚刚发布),从源代码构建:相同。

  • Cygwin:一样。

  • CentOS 5.6(Red Hat 的克隆版),GNU grep 2.5.1:/bin/egrep 和 /bin/fgrep 是 /bin/grep 的符号链接。

  • GNU grep 2.5.1 从源代码构建:egrep 和 fgrep 是调用 grep 的小型 shell 脚本。

  • Solaris 9:三个不同的文件(Solaris 工具,不是 GNU)。

答案2

它们曾经是单独的可执行文件,但现在通常是一个可执行文件,其中三个硬链接(“grep”、“fgrep”和“egrep”)都指向同一个程序:该程序检查它以哪个名称启动,并相应地运行。

因此,你运行的是一个增强版的 egrep,它包含了另外两个程序的功能:并使用不同的名称来调用它,或者使用-E为您提供您所期望的功能。

如果你输入

ls -i `which grep`

同样适用于命令行工具egrep您可能会看到它们都具有相同的 inode 编号,这意味着它们都是同一个文件。

答案3

在 Ubuntu 18.04cat /bin/egrep输出

    #!/bin/sh 
    exec grep -E "$@"

相关内容