解释! grep、egrep 和 fgrep 命令之间的区别
我相信你已经熟悉grep 命令。你可能在某些互联网论坛讨论中遇到过诸如egrep
和之类的术语fgrep
,并想知道这些命令是什么以及它们是否与 grep 相关。
在本教程中,我将讨论这些 grep 变体并解释其差异和相似之处。
什么是egrep和fgrep?grep、egrep、fgrep三者有什么区别?
egrepe
中的 代表扩展,而f
fgrep 中的 代表固定。egrep 允许使用扩展正则表达式,而 fgrep 根本不允许使用正则表达式。
当我用例子解释这一切时,很快就会变得更有意义。
您知道 grep 适用于正则表达式。但这并不是全部事实。
默认情况下,grep 命令适用于基本正则表达式。如果要进行更复杂的搜索,则需要使用扩展正则表达式。请参阅基本正则表达式和扩展正则表达式之间的区别。
egrep 命令允许使用扩展正则表达式。
另一方面,fgrep 命令针对固定字符串而不是正则表达式。这意味着它采用搜索模式进行搜索,因此比 grep 更快。
尽管你仍可能看到它们,egrep
但fgrep
它们的状态已被弃用。许多系统仍包含这些变体的二进制文件。
但是,现在POSIX 标准是使用带有特殊选项标志(-E
或-F
)的标准 grep。这些标志可帮助标准 grep 模拟每个相应命令的功能。
总结一下:
egrep
和fgrep
是已弃用的命令,应避免使用。egrep
相当于grep -E
命令,它允许使用扩展正则表达式。fgrep
相当于grep -F
命令,它使用固定字符串进行搜索,因此搜索速度更快。
通过示例了解 grep、egrep 和 fgrep 之间的区别
我创建了一个简短的文本文件来演示这些 grep 变体之间的差异。
christopher@linux-handbook:~$ cat test.txt
this is a tasty test
标准 grep 命令
这是 grep 的标准版本,旨在使用基本正则表达式搜索模式。使用 grep 需要转义元字符才能产生预期的行为。
假设我想搜索tast
或test
。我可以使用以下命令:
christopher@linux-handbook:~$ grep 't\(a\|e\)st' test.txt
注意到你必须转义括号了吗?使用扩展正则表达式,这更容易查看和理解。
扩展 Grep:Egrep 或 grep -E
Egrep 的创建是为了提供对元字符的扩展支持。这意味着它默认会转义这些特殊字符。这可以节省时间,并且通常使表达式更易于阅读。
我上面使用的命令可以重写为更清晰的命令:
christopher@linux-handbook:~$ 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 有了更好的理解。如果你还有什么要补充的,请随时发表评论。