Zobacz opcje -F
(stały ciąg, w przeciwieństwie do wyrażeń regularnych) i -x
(dokładnie: dopasuj całą linię).
grep -Fx user1@example.com text_file
byłoby równoważne z:
grep '^user1@example\.com$' text_file
(pamiętaj, że .
jest to operator wyrażeń regularnych, który pasuje do dowolnego znaku).
Użyj tej -q
opcji, jeśli chcesz tylko sprawdzić, czy jest taka linia:
grep -Fxq user1@example.com text_file &&
echo yes, that address is in that file.
Jeśli wiersz do wyszukania i nazwa pliku są zmienne:
grep -Fxqe "$email" < "$file"
Lub
grep -Fxq -- "$email" < "$file"
Nie chcesz:
grep -Fxq "$email" "$file"
jako że mogłoby spowodować problemy, jeśli $email
lub $file
zaczęło się -
.
Jeśli plik jest posortowany (najlepiej w bieżącej lokalizacji C
), możesz przyspieszyć, używając comm
zamiast grep
:
printf '%s\n' user1@example.com | comm -12 - text_file
Przewaga stanie się bardziej oczywista, gdy będziesz mieć kilka adresów e-mail do sprawdzenia (na przykład w innym posortowanym pliku):
comm -12 text_file emails_to_check
byłoby szybsze niż:
grep -Fxf emails_to_check text_file