BSD Grep patternfile (-f) пропускает шаблоны, содержащие подстроки предыдущих шаблонов. Заказ чувствительный? - PullRequest
2 голосов
/ 04 мая 2020

У меня есть файл со списком ключевых слов, которые я хотел бы найти (pattern.txt):

foo
foo_bar
asdf
asdf_fdsa

Некоторые из этих ключевых слов являются подстроками других, поэтому я использую параметр -w для grep для поиска полных слов.

В этом примере я просто использую копию файла шаблона для данных для поиска (data.txt).


Когда я запускаю grep -wf pattern.txt data.txt Я ожидаю, что все шаблоны будут найдены, но результатом будут только два меньших шаблона:

foo
asdf

Однако, если я переупорядочу файл шаблона, чтобы перечислить длинные слова перед короткими словами :

foo_bar
foo
asdf_fdsa
asdf

grep -wf pattern.txt data.txt вернет все четыре совпадения. Что дает? Почему порядок файла шаблона меняет вывод здесь?

После исследования я могу сказать, что -f является сокращением для записи grep -e ... -e ... etc., и могу подтвердить, что это поведение отражается при записи в этой форме, но я не могу найти никакой информации об этом поведении, зависящем от порядка. Спасибо за любую информацию.

Изменить: в macOS с BSD grep 2.5.1-FreeBSD

...