Извлечение раздела строки резервной копии mysql с помощью sed

Иногда мне нужно извлечь одну запись из mysqlbackup

Для этого я сначала извлекаю одну таблицу, которую я хочу из резервной копии …

sed -n -e '/CREATE TABLE.*usertext/,/CREATE TABLE/p' 20120930_backup.sql > table.sql

В table.sql записи группируются с использованием расширенных вставок (возможно, 100 записей для каждой вставки до создания новой строки, начинающейся с INSERT INTO), поэтому они выглядят как …

INSERT INTO usertext VALUES (1, field2 etc), (2, field2 etc),

INSERT INTO usertext VALUES (101, field2 etc), (102, field2 etc), ...

Я пытаюсь извлечь из этого запись 239560, используя …

sed -n -e '/(239560.*/,/)/p' table.sql > record.sql

Т.е. начало streamа при обнаружении 239560 и остановка, когда он попадает в закрывающую скобку

Но это не работает, как я надеялся, это просто приводит к выходу полной партии вставки.

Пожалуйста, может кто-нибудь дать мне несколько указателей относительно того, где я ошибаюсь?

Будет ли я лучше использовать awk для извлечения сегментов линий и использовать sed для извлечения строк внутри fileа?

Основываясь на ответе Иэна, я придумал этот трюк …

 $ sed 's/\(INSERT[^(]*\).*\((239560,[^)]*)\),.*/\1\2/' sample.sql | tee 1-record.sql INSERT INTO usertext VALUES (239560, 2, 3, 4) $ 

– Изменение без использования sed … Вы можете извлечь значения некоторой строки / вставки, которые соответствуют только одному числу.

 $ cat sample.sql INSERT INTO usertext VALUES (101, field2 etc), (102, field2 etc), (239560, 2, 3, 4), (5, 8, 9) INSERT INTO usertext VALUES (101, field2 etc), (102, field2 etc), (1239560, 2, 3, 4), (5, 8, 9) $ egrep -o '(\(239560\,[^)]+\))' sample.sql (239560, 2, 3, 4) $ 

остальная часть вставки может быть легко написана сценарием, если вы используете -n переkeyатель с grep, чтобы поймать линию совпадения, а затем просто разрезать все до первого (

Попробуйте что-то вроде этого, которое может быть настроено на ваш пример, но, надеюсь, вы попадете на правильный path

заданный inputной file, подобный этому

 INSERT INTO usertext VALUES (101, field2 etc), (102, field2 etc), (103,filed2, etc), ... sed 's/.*\((102,[^)]*)\),.*/\1/' f (102, field2, etc) 

То, что это делает, разбивает ваши данные на 3 раздела, запоминает важный раздел, используя (…), и заменяет его на всю строку.

  • .* все перед textом, который вы хотите
  • \((102,[^)]*)\) ваш интересный text
  • ,.* все остальное
  • удалить непечатаемые символы
  • Извлечь 1 IP-адрес от 2 или более строк в строке textа
  • Как replace весь блок NGINX на sed?
  • sed с несколькими совпадениями
  • читать заданный range строк из fileа
  • Загрузка черного списка IP-адресов из fileа в IPTABLES
  • Запись в / etc / networking / interfaces при загрузке с помощью sed / awk?
  • BASH - sed заменяет IP-варианты
  • псевдоним для замены textа в fileе
  • Рекурсивно изменить имя fileа и содержимого внутри fileа, если соответствует keyевому слову
  • Как удалить все символы в одной строке после «]» с помощью sed?
  • Interesting Posts

    Как остановить uwsgi, когда less pidfile в config?

    Firefox не загружает цепочку certificateов

    трехстороннее рукопожатие и порядковый номер

    Будет ли 300 Вт psu истощать больше мощности, чем 100 Вт, если система использует только ~ 80 Вт?

    Является ли Google Cloud SQL отказоустойчивым при наличии реплики?

    java keystore не может проверить URL-адрес

    Какая лучшая configuration serverа (аппаратное и программное обеспечение) для моей компании?

    Как я могу заставить клиент Mac RDC подkeyиться к W2K3 после вkeyения поддержки FIPS?

    Отсутствует file журнала, как я могу уviewеть это и что с ним произошло

    Как контролировать политику приема в vmware HA?

    Снимки VMWare / ESX и моментальные снимки Libvirt и моментальные снимки LVM2

    Резервные копии для онлайн-бизнеса – лучшие внешние жесткие диски или стримеры

    Apache 2.2 + PHP 5.3.2 + cURL не работает

    понимание «ip addr change» и команды «ip addr replace»

    Exchange не проверяет запись SPF для собственного домена

    Давайте будем гением компьютера.