Разбор SQL-дампа: Как через grep вытащить все строки INSERT INTO users, содержащие определенный паттерн почты, и сохранить их в новый .sql файл?
Для извлечения строк INSERT INTO users с определённым паттерном почты из SQL-дампа через grep используется следующий подход.
**Базовая команда:**
grep -i ‘INSERT INTO `users`’ dump.sql | grep -E ‘[a-zA-Z0-9._%+-]+@example.com’ > filtered_users.sql
Здесь первый grep фильтрует только строки с INSERT INTO users, второй — оставляет только те, где встречается email с доменом example.com.
**Более гибкий вариант с одной командой:**
grep -iE ‘INSERT INTO `?users`?.*[a-zA-Z0-9._%+-]+@example.com’ dump.sql > filtered_users.sql
Флаг -i обеспечивает регистронезависимый поиск, -E включает расширенные регулярные выражения.
**Если нужно искать по любому домену, но конкретному локальному имени:**
grep -iE ‘INSERT INTO `?users`?.*admin@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}’ dump.sql > filtered_users.sql
**Если INSERT занимает несколько строк (многострочный дамп):**
В таком случае grep не подойдёт напрямую, лучше использовать awk или perl:
perl -0777 -ne ‘while (/INSERT INTO `?users`?[^;]*?[a-zA-Z0-9._%+-]+@example.com[^;]*;/gsi) { print «$&;n» }’ dump.sql > filtered_users.sql
**Добавление заголовка транзакции для корректного .sql файла:**
{ echo ‘SET NAMES utf8;’; grep -iE ‘INSERT INTO `?users`?.*@example.com’ dump.sql; } > filtered_users.sql
**Полезные флаги grep:**
— `-n` — показывает номера строк (для отладки)
— `-c` — считает количество совпадений
— `—color` — подсвечивает совпадения в терминале
— `-v` — инвертирует поиск (исключает строки с паттерном)
**Пример с подсчётом найденных строк перед сохранением:**
grep -icE ‘INSERT INTO `?users`?.*@example.com’ dump.sql
grep -iE ‘INSERT INTO `?users`?.*@example.com’ dump.sql > filtered_users.sql
**Важные нюансы:**
1. Если таблица называется users без обратных кавычек, уберите `?.
2. Убедитесь, что кодировка дампа UTF-8, иначе добавьте `LANG=en_US.UTF-8` перед командой.
3. Для очень больших дампов (>1 ГБ) grep работает быстрее, чем Python или sed, благодаря потоковой обработке.
4. Проверьте результат командой `wc -l filtered_users.sql`, чтобы убедиться, что строки извлечены.
Таким образом, комбинация grep с регулярными выражениями — быстрый и надёжный способ парсинга SQL-дампов без необходимости загружать базу данных.
