список таблиц из mysql файла дампа с помощью sed - PullRequest
2 голосов
/ 16 июня 2020

У меня ситуация, когда мне нужно извлечь список таблиц из mysql файла дампа. Я пробовал это с помощью sed

 sed  's/DROP TABLE.*?`(.*?)`/\1/' baza.sql > 1.txt

, но получил эту ошибку

sed: -e expression #1, char 26: invalid reference \1 on `s' command's RHS

что я пропустил в своем регулярном выражении?

1 Ответ

1 голос
/ 16 июня 2020

Поскольку вы используете Linux, и вам нужно получить все строки внутри первых обратных кавычек после DROP TABLE, я бы предложил использовать grep с регулярным выражением PCRE, например

grep -oP 'DROP TABLE.*?`\K[^`]+' baza.sql > 1.txt

См. PCRE regex demo .

Подробности

  • DROP TABLE - некоторый буквальный текст
  • .*? - любой ноль или более символов, кроме символов разрыва строки, как можно меньше
  • ` - обратная кавычка
  • \K - оператор сброса соответствия, отбрасывающий весь текст, сопоставленный на данный момент
  • [^`]+ - один или несколько символов, кроме обратной кавычки

Если у вас есть совпадения один раз в строке, вы все равно можете go с sed:

sed -nE 's/DROP TABLE.*`([^`]*)`.*/\1/p' baza.sql > 1.txt

Здесь -n подавляет вывод строки по умолчанию, -E включает POSIX ERE (где (...) определяет группу захвата, а не \(...\)), тогда флаг p выводит только результат подстановки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...