Jak grepować z listą słów

84

Mam plik A zawierający 100 słów oddzielonych nowymi wierszami. Chciałbym przeszukać plik B, aby sprawdzić, czy występuje w nim JAKIEKOLWIEK ze słów z pliku A.

Próbowałem następujących rzeczy, ale nie działa to dla mnie:

grep -F A B
feniks
źródło

Odpowiedzi:

116

Musisz skorzystać z opcji -f:

$ grep -f A B

Ta opcja -Fwykonuje ustalone wyszukiwanie łańcuchów, gdzie tak samo jak -fokreśla plik wzorców. Możesz chcieć obu, jeśli plik zawiera tylko ustalone ciągi, a nie wyrażenia regularne.

$ grep -Ff A B

Możesz też chcieć -wdopasować tylko całe słowa:

$ grep -wFf A B

Przeczytaj man grepopis wszystkich możliwych argumentów i tego, co robią.

Chris Seymour
źródło
4
Czy -F jest tylko optymalizacją, jeśli nie chcesz używać wyrażeń regularnych?
feniks,
A co ze znalezieniem wszystkich wystąpień słów w pliku A w drzewie katalogowym B , podając tylko nazwy plików wszystkich dopasowań w B?
zealoushacker
2

Aby znaleźć bardzo długą listę słów w dużych plikach, efektywniejsze może być użycie egrep:

remove the last \n of A
$ tr '\n' '|' < A > A_regex
$ egrep -f A_regex B
Alcolo47
źródło