Разбор 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-дампов без необходимости загружать базу данных.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.