grep,egrep和fgrep命令之间的区别
在本教程中,我将讨论这些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命令用于查找文件中的模式。