相信大家对 grep 命令已经很熟悉了。 您可能会遇到以下术语 egrep
和 fgrep
在一些互联网论坛讨论中,想知道这些命令是什么以及它们是否与 grep 有关。
在本教程中,我将讨论这些 grep 变体,解释它们的区别和相似之处。
egrep 和 fgrep 是什么? grep、egrep 和 fgrep 有什么区别?
这 e
在 egrep 中代表扩展和 f
在 fgrep 中代表固定。 egrep 允许使用扩展的正则表达式,而 fgrep 根本不允许使用正则表达式。
当我用例子解释它们时,所有这些很快就会变得更有意义。
你知道 grep 适用于正则表达式。 但这不是完整的事实。
默认情况下,grep 命令适用于基本的正则表达式。 如果你想要更复杂的搜索,你需要使用扩展的正则表达式。 查看两者之间的区别 基本和扩展正则表达式.
egrep 命令允许使用扩展的正则表达式。
另一方面, fgrep 命令适用于固定字符串而不是正则表达式。 这意味着它采用搜索模式进行搜索,因此它比 grep 更快。
虽然,你可能仍然看到 egrep
和 fgrep
在野外,它们的状态已被弃用。 许多系统仍然包含这些变体的二进制文件。
不过,现在是 POSIX 标准 使用带有特殊选项标志的标准 grep (-E
或者 -F
)。 这些标志帮助标准 grep 模拟每个相应命令的功能。
总结一下:
egrep
和fgrep
是不推荐使用的命令,应避免使用。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 -E
和 grep -F
是前进的方向。
我希望您现在对 grep、egrep 和 fgrep 有了更好的了解。 如果您有什么要补充的,请随时发表评论。