См. -F(Фиксированная строка в отличие от регулярного выражения) и -x(точный: соответствовать всей строке) параметры.
grep -Fx user1@example.com text_file
будет эквивалентно:
grep '^user1@example\.com$' text_file
(помните, что .это оператор регулярного выражения, соответствующий любому символу).
Используйте эту -qопцию, если вы хотите проверить, есть ли такая строка:
grep -Fxq user1@example.com text_file &&
echo yes, that address is in that file.
Если строка для поиска и имя файла являются переменными:
grep -Fxqe "$email" < "$file"
Или
grep -Fxq -- "$email" < "$file"
Вы не хотите:
grep -Fxq "$email" "$file"
так как это может вызвать проблемы, если $emailили $fileначалось с -.
Если файл отсортирован (предпочтительно в вашей текущей локали C), вы можете ускорить процесс, используя commвместо grep:
printf '%s\n' user1@example.com | comm -12 - text_file
Преимущество станет более очевидным, когда вам нужно проверить несколько адресов электронной почты (например, в другом отсортированном файле):
comm -12 text_file emails_to_check
будет быстрее чем:
grep -Fxf emails_to_check text_file