fgrep
эквивалентно grep -F
, а не grep -f
. А опция -F
соответствует фиксированным строкам, а не шаблонам. Если вы пытаетесь сопоставить буквенную строку «abc *», это отличается от регулярного выражения, начинающегося с «ab» и сопровождаемого нулем или более символами «c».
Давайте установим, с чем мы работаем:
[ghoti@pc ~]$ cat logs.txt
ab
blah_blah """abc*""" duh_duh
abc
[ghoti@pc ~]$ cat patterns.txt
abc*
[ghoti@pc ~]$
И попробуйте grep и fgrep:
[ghoti@pc ~]$ grep -f patterns.txt logs.txt
ab
blah_blah """abc*""" duh_duh
abc
[ghoti@pc ~]$ fgrep -f patterns.txt logs.txt
blah_blah """abc*""" duh_duh
[ghoti@pc ~]$
Как видите, шаблон интерпретируется как регулярное выражение grep
, а как буквальная строка fgrep
.
Убедитесь, что вы соответствуете строк или шаблонов , и вы будете знать, какую версию grep вам следует использовать.