解释! grep、egrep 和 fgrep 命令的区别

相信大家对 grep 命令已经很熟悉了。 您可能会遇到以下术语 egrepfgrep 在一些互联网论坛讨论中,想知道这些命令是什么以及它们是否与 grep 有关。

在本教程中,我将讨论这些 grep 变体,解释它们的区别和相似之处。

egrep 和 fgrep 是什么? grep、egrep 和 fgrep 有什么区别?

e 在 egrep 中代表扩展和 f 在 fgrep 中代表固定。 egrep 允许使用扩展的正则表达式,而 fgrep 根本不允许使用正则表达式。

当我用例子解释它们时,所有这些很快就会变得更有意义。

你知道 grep 适用于正则表达式。 但这不是完整的事实。

默认情况下,grep 命令适用于基本的正则表达式。 如果你想要更复杂的搜索,你需要使用扩展的正则表达式。 查看两者之间的区别 基本和扩展正则表达式.

egrep 命令允许使用扩展的正则表达式。

另一方面, fgrep 命令适用于固定字符串而不是正则表达式。 这意味着它采用搜索模式进行搜索,因此它比 grep 更快。

虽然,你可能仍然看到 egrepfgrep 在野外,它们的状态已被弃用。 许多系统仍然包含这些变体的二进制文件。

不过,现在是 POSIX 标准 使用带有特殊选项标志的标准 grep (-E 或者 -F)。 这些标志帮助标准 grep 模拟每个相应命令的功能。

总结一下:

  • egrepfgrep 是不推荐使用的命令,应避免使用。
  • egrep 相当于 grep -E 命令,它允许使用扩展的正则表达式。
  • fgrep 相当于 grep -F 命令,它使用固定字符串进行搜索,因此它执行更快的搜索。

了解 grep、egrep 和 fgrep 之间的区别 example

我创建了一个简短的文本文件来演示这些 grep 变体之间的差异。

[email protected]:~$ cat test.txt 
this is a tasty test

标准 grep 命令

这是 grep 的标准版本,专为使用基本正则表达式搜索模式而设计。 使用 grep 需要转义元字符以生成预期的行为。

假设我想搜索 tast 或者 test. 这是我可以使用的:

[email protected]:~$ grep 't(a|e)st' test.txt

注意你必须如何转义括号? 使用扩展的正则表达式更容易查看和理解。

扩展 Grep:Egrep 或 grep -E

创建 Egrep 是为了提供 扩展的 支持元字符。 这意味着它默认转义这些特殊字符。 这节省了时间,并且通常使表达式更易于阅读。

我上面使用的命令可以重写为更清晰:

[email protected]:~$ egrep 't(a|e)st' test.txt

egrep 二进制文件并不始终支持 { 特点。 这可能会导致意外行为。

某些版本的 egrep 允许它们在转义时被正确解释为文字字符 ({)。 但是,匹配文字的最佳实践 { 是用方括号括起来 [{].

固定 Grep:Fgrep 或 grep -F

软件专业人士知道,即使计算能力已显着提高,优化也不容忽视。 Grep 是一个非常强大的工具,但它有时会不必要地占用系统资源。

这就是固定 grep 的想法的来源。 该软件非常适合需要匹配精确字符串的用例。

它没有其他 grep 变体的强大表达工具。 那个弱点其实就是它的超能力。 这使得该工具更快。

正如我之前提到的,您应该避免使用 egrep 和 fgrep,因为它们是不推荐使用的命令。 使用 grep -Egrep -F 是前进的方向。

我希望您现在对 grep、egrep 和 fgrep 有了更好的了解。 如果您有什么要补充的,请随时发表评论。