📜  grep 和 fgrep 命令的区别

📅  最后修改于: 2021-09-15 01:20:42             🧑  作者: Mango

grep 过滤器在文件中搜索特定的字符模式并显示包含该模式的所有行。 fgrep 过滤器在一个或多个文件中搜索固定字符串。

grep 命令的语法:

grep [options] pattern [files]

fgrep 命令的语法:

fgrep [options] pattern [files]

这两个命令之间的主要区别是:

  • 他们使用的字符串匹配算法。
  • fgrep 总是使用最差 O(m+n) 复杂度的Aho-Corasick 算法
  • grep 命令始终使用具有最坏情况 O(mn) 复杂度的 Commentz-Walter 算法修改版本
  • fgrep 命令将 PATTERN 解释为由换行符分隔的固定字符串列表。但是 grep 总是被解释为正则表达式。

两个命令之间的相似性

考虑以下名为para2 的文件

Hi, are you using geeksforgeeks for learning computer science concepts.
Geeksforgeeks is best for learning.

考虑下面的

are
using
geeksforgeeks
learning
concepts

使用 grep 命令:

$grep -f word para

输出:

Hi, are you using geeksforgeeks for learning computer science concepts.
Geeksforgeeks is best for learning.

使用 fgrep 命令:

$fgrep -f word para

输出:

Hi, are you using geeksforgeeks for learning computer science concepts.
Geeksforgeeks is best for learning.

两个命令的区别

考虑以下文件

Hi, @re you usin.g geeks*forgeeks for learni\ng computer science con/cepts.
Geeks*forgeeks is best for learni\ng.

考虑下面的

@re
usin.g
geeks*forgeeks
learni\ng
con/cepts

使用 grep 命令:

grep -f word para

输出:

Hi, @re you usin.g geeks*forgeeks for learni\ng computer science con/cepts.

使用 fgrep 命令:

fgrep -f word para

输出:

Hi, @re you usin.g geeks*forgeeks for learni\ng computer science con/cepts.
Geeks*forgeeks is best for learni\ng.