Тестирование Fgrep дает те же результаты как Grep

Я пытаюсь изучить, как fgrep отличается от grep. Однако в моих результатах испытаний, нет никакого различия. По-видимому, fgrep соответствует на строках и игнорирует regex. Таким образом, я проверил это и не было абсолютно ничего, что основной 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
0
задан 28 February 2019 в 06:00

1 ответ

Можно найти полезным добавить -o переключатель, чтобы помочь видеть, что происходит:

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

Здесь мы используем grep в режиме Basic Regular Expression, где | не является особенным (этого должны были бы оставить \| означать OR), таким образом, шаблон подобран как единственная строка

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

Здесь мы переключились на режим Extended Regular Expression (ERE), где | regex специальный символ, таким образом, мы соответствуем двум шаблонам, subscribe и unsubscribe

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

Теперь мы соответствуем в фиксированном строковом режиме (как fgrep) и как ожидалось | не является особенным - точно так же, как BRE.

fgrep (официально, удержан от использования) эквивалентный из grep -F таким образом, это ведет себя точно то же:

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

Насколько мне известно, @ не является особенным или в BRE или в ДО, так будет всегда давать тот же результат как fgrep или grep -F.

0
ответ дан 26 October 2019 в 03:24

Другие вопросы по тегам:

Похожие вопросы: