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 yiibai for learning computer science concepts.
Yiibai.com is best for learning.

假设有一个名称为 word2 的文件,内容如下:

are
using
yiibai
learning
concepts

使用 grep 命令:

$grep -f word2 para2

输出内容如下:

Hi, are you using yiibai for learning computer science concepts.
Yiibai.com is best for learning.

使用 fgrep 命令:

$ fgrep -f word para

输出结果:

Hi, are you using yiibai for learning computer science concepts.
Yiibai.com is best for learning.

假设 word 文件的内容如下:

Hi, @re you usin.g yii*bai for learning computer science con/cepts.
Yii*bai is best for learning.

para 文件的内容如下:

@re
usin.g
yii*bai
learning
con/cepts

使用 grep 命令:

$ grep -f word para

运行结果:

Hi, @re you usin.g yiibai for learning computer science *con/cepts.

使用 fgrep 命令:

$ fgrep -f word para

运行结果:

Hi, @re you usin.g yii*bai for learning computer science con/cepts.
Yiibai is best for *learning.