Использование фиксированных строк в регулярных выражениях?

Я пишу сценарий bash, который принимает список CSV-файлов в качестве аргументов и выводит адреса электронной почты, найденные только в первом файле. Чтобы выполнить это, для каждой записи в первом CSV-файле я просматриваю поле адреса электронной почты и считываю его содержимое в переменную оболочки. Затем я использую grep -iE со следующим регулярным выражением, чтобы найти адрес электронной почты, только что найденный во всех остальных файлах, убедившись, что это не подстрока (например, he@a.com – это не то же самое, что она @ a.com ) и позволяет ему быть в начале или конце записи:

 "^(.*,)?($EMAIL_ADDRESS|\"$EMAIL_ADDRESS\")(,.*)?\$" 

Проблема с этим подходом заключается в том, что адреса электронной почты содержат точки, которые имеют особое значение в регулярных выражениях. Мои вопросы:

  1. Как я могу избежать этой проблемы элегантным способом?
  2. Как я могу избежать этой проблемы в более общем контексте, например, когда значение для поиска не является адресом электронной почты, а некоторым свободным текстом и может содержать и другие специальные символы?

One Solution collect form web for “Использование фиксированных строк в регулярных выражениях?”

в perl regexp ( grep -P ... ) вы можете использовать \Q...\E для защиты метасимволов

 grep -P "(^|,)\Q$EMAIL\E(,|$)" file.csv 

где:

  • (^|,) = начало поля
  • (,|$) = конец поля
  • PCRE-regex Используйте grep для исключения группы захвата
  • Рекурсивно редактировать файлы на основе имени родительского каталога
  • Переименование и переупорядочение нескольких имен файлов без переименования
  • rsyslog: make% syslogtag% равна длине
  • Как найти все соответствия регулярному выражению в строке
  • обратные ссылки в regex `rename`
  • Как использовать переменные окружения в регулярном выражении в awk?
  • Простой способ извлечь ценность из HTML
  • Переименование файлов добавляет тире после четвертого и шестого символов
  • Как избежать метасимволов для egrep, как метакод из Perl?
  • В чем смысл этого тестового выражения ?
  • Linux и Unix - лучшая ОС в мире.