grep,egrep和fgrep命令之间的区别

时间:2020-03-05 15:26:54  来源:igfitidea点击:

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

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

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

当我通过示例进行解释时,所有这些将很快变得更有意义。

我们知道grep在正则表达式上有效。
但这还不是全部。

默认情况下,grep命令对基本正则表达式起作用。
如果要进行更复杂的搜索,则需要使用扩展的正则表达式。
查看基本正则表达式和扩展正则表达式之间的区别。

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

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

尽管我们可能仍然会疯狂地看到“ egrep”和“ fgrep”,但它们的状态已被弃用。
许多系统仍包含这些变体的二进制文件。

但是,现在使用带有特殊选项标志(-E或者-F)的标准grep成为POSIX标准。

这些标志有助于标准grep模拟每个命令的功能。

总结一下:

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

通过示例了解grep,egrep和fgrep之间的区别

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

Hyman@theitroad:~$cat test.txt 
this is a tasty test

标准grep命令

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

假设我要搜索“ tast”或者“ test”。
这是我可以使用的:

Hyman@theitroad:~$grep 't\(a\|e\)st' test.txt

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

扩展Grep:Egrep或者grep -E

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

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

Hyman@theitroad:~$egrep 't(a|e)st' test.txt

egrep二进制文件不始终支持{字符。
这可能会导致意外的行为。

某些版本的egrep允许将它们正确地解释为原义字符(如果转义的话,则为“ \ {”)。
但是,匹配文字“ {”的最佳实践是将其括在方括号“ [{]”中。

固定的Grep:Fgrep或者grep -F

软件专业人员知道,即使计算能力得到了极大的提高,优化也不容忽视。
Grep是一个非常强大的工具,但是有时可以不必要地使用系统资源。

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

它没有其他grep变体的强大表达工具。
那个弱点实际上是它的超级力量。
这使该工具快得多。

grep命令用于查找文件中的模式。