Использование фиксированных строк в регулярных выражениях?
Я пишу сценарий bash, который принимает список CSV-файлов в качестве аргументов и выводит адреса электронной почты, найденные только в первом файле. Чтобы выполнить это, для каждой записи в первом CSV-файле я просматриваю поле адреса электронной почты и считываю его содержимое в переменную оболочки. Затем я использую grep -iE
со следующим регулярным выражением, чтобы найти адрес электронной почты, только что найденный во всех остальных файлах, убедившись, что это не подстрока (например, he@a.com – это не то же самое, что она @ a.com ) и позволяет ему быть в начале или конце записи:
"^(.*,)?($EMAIL_ADDRESS|\"$EMAIL_ADDRESS\")(,.*)?\$"
Проблема с этим подходом заключается в том, что адреса электронной почты содержат точки, которые имеют особое значение в регулярных выражениях. Мои вопросы:
- Как выбрать неполный диапазон пакетов с apt?
- Совпадение простого регулярного выражения
- Извлекать подстроки из каждой строки. Эти подстроки разделены запятыми, формат «name = value»
- Тестирование регулярного выражения из stdin с помощью grep | sed | awk
- Анализ паролей Apache для исключения диапазонов IP-адресов
- Как я могу избежать этой проблемы элегантным способом?
- Как я могу избежать этой проблемы в более общем контексте, например, когда значение для поиска не является адресом электронной почты, а некоторым свободным текстом и может содержать и другие специальные символы?
- Как удалить теги html из файла с помощью sed?
- Объединить два greps в одну команду
- Считать количество вхождений регулярного выражения в круглых скобках
- Найти имена репозиториев из гитолитного информационного вывода
- Grep текст, соответствующий шаблону
- grep эквивалент регулярного выражения kwrite +
- Как сделать Regexp / pattern-search в файлах с ружьем?
- grep для текста, который может или не может присутствовать
One Solution collect form web for “Использование фиксированных строк в регулярных выражениях?”
в perl regexp ( grep -P ...
) вы можете использовать \Q...\E
для защиты метасимволов
grep -P "(^|,)\Q$EMAIL\E(,|$)" file.csv
где:
-
(^|,)
= начало поля -
(,|$)
= конец поля