Перегляньте -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