测试 Fgrep 得到与 Grep 相同的结果

测试 Fgrep 得到与 Grep 相同的结果

我正在尝试了解 fgrep 与 grep 有何不同。但是在我的测试结果中,两者没有区别。显然 fgrep 匹配字符串并忽略正则表达式。所以我对此进行了测试,基本 fgrep 可以做的事情,grep 做不到。所以我无法继续,我需要了解为什么我会得到下面的结果,以及 fgrep 之间的区别是什么,因为我明确地不能看到任何测试结果的差异。

$ cat testfile
subscribe|unsubscribe
@lp1n3

$ grep 'subscribe|unsubscribe' testfile
subscribe|unsubscribe
$ fgrep 'subscribe|unsubscribe' testfile
subscribe|unsubscribe

$ grep '@lp1n3' testfile
@lp1n3
$ fgrep '@lp1n3' testfile
@lp1n3

答案1

您可能会发现添加-o开关会有所帮助,以便更容易地查看正在发生的事情:

$ grep -o 'subscribe|unsubscribe' testfile
subscribe|unsubscribe

这里我们使用grep基本正则表达式模式,其中|并不特殊(需要转义才能\|表示OR),因此该模式匹配为单个字符串

$ grep -oE 'subscribe|unsubscribe' testfile
subscribe
unsubscribe

这里我们切换到扩展正则表达式 (ERE) 模式,其中|是正则表达式特殊字符,因此我们匹配两个模式,subscribe并且unsubscribe

$ grep -oF 'subscribe|unsubscribe' testfile
subscribe|unsubscribe

现在我们以固定字符串模式进行匹配(如fgrep),并且正如预期的那样|没有什么特殊之处——就像 BRE 一样。

fgrep是(正式的,已弃用) 相当于grep -F,因此其行为完全相同:

$ fgrep -o 'subscribe|unsubscribe' testfile
subscribe|unsubscribe

据我所知,在 BRE 或 ERE 中都不是特殊的,因此总是会给出与或@相同的结果。fgrepgrep -F

相关内容