Как grep со списком слов

У меня есть файл A со 100 словами, разделенными новыми строками. Я хотел бы найти файл B, чтобы увидеть, встречаются ли в нем ЛЮБОЕ из слов в файле A.

Я пробовал следующее, но у меня не работает:

grep -F A B

person phoenix    schedule 25.07.2013    source источник


Ответы (2)


Вам нужно использовать опцию -f:

$ grep -f A B

Опция -F выполняет поиск фиксированной строки, тогда как -f предназначена для указания файла шаблонов. Вам может понадобиться и то, и другое, если файл содержит только фиксированные строки, а не регулярные выражения.

$ grep -Ff A B

Вам также может понадобиться опция -w для сопоставления только целых слов:

$ grep -wFf A B

Прочтите man grep для описания всех возможных аргументов и того, что они делают.

person Chris Seymour    schedule 25.07.2013
comment
Является ли -F просто оптимизацией, если вы не хотите использовать регулярные выражения? - person phoenix; 25.07.2013
comment
Как насчет поиска всех вхождений слов в файле A в дереве каталогов B, перечисляя только имена файлов всех совпадений в B? - person zealoushacker; 24.09.2014

Чтобы найти очень длинный список слов в больших файлах, может быть эффективнее использовать egrep:

remove the last \n of A
$ tr '\n' '|' < A > A_regex
$ egrep -f A_regex B
person Alcolo47    schedule 16.12.2014