См. -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