Замена электронной почты SED (значения json в дампе sql) - PullRequest
0 голосов
/ 18 октября 2018

У меня есть база данных, в которой хранятся некоторые заказы.В моей таблице заказов у ​​меня есть поле "etra", которое содержит всю информацию о заказе в JSON (включая электронную почту пользователей).Я должен сбросить свою базу данных.Дамп работает правильно, но я хочу заменить адреса электронной почты пользователей на другие (webmaster@random.fr во всех случаях) для следующего импорта дампа.

Я попытался с помощью команды sed.Это мой пример структуры дампа:

(xxxxxxxx,\"billing_firstname\":{},\"billing_email\":\"machin@hotmail.fr\",\"billing_address\":\"3 avenue des salades\",\"billing_address_2\":{}),(xxxxxxxx,\"billing_firstname\":{},\"billing_email\":\"bidule@gmail.fr\",\"billing_address\":\"5 avenue des laitues\",\"billing_address_2\":{}),(xxxxxxxx,\"billing_firstname\":{},\"billing_email\":\"exemple@laposte.fr\",\"billing_address\":\"6 avenue des maches\",\"billing_address_2\":{}),(xxxxxxxx,\"billing_firstname\":{},\"billing_email\":\"test@live.fr\",\"billing_address\":\"13 avenue des endives\",\"billing_address_2\":{}),(xxxxxxxx,\"billing_firstname\":{},\"billing_email\":\"essai@caramail.fr\",\"billing_address\":\"8 avenue des feuilles\",\"billing_address_2\":{});

Когда я применяю этот sed с регулярным выражением:

sed -i -E 's/(\\"billing_email\\":\\").*(\\",\\"billing_address)/\1webmaster@random.fr\2/g'

Сгенерированный файл содержит только один порядок:

(xxxxxxxx,\"billing_firstname\":{},\"billing_email\":\"webmaster@random.fr\",\"billing_address\":\"8 avenue des feuilles\",\"billing_address_2\":{});

Любая помощь в решении этого вопроса

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я только что внес некоторые изменения в ваше регулярное выражение, но ваше решение работает!

Последняя команда:

sed -i -E 's/(_email[\\":\\"]+)[a-z0-9._%+-]+@[a-z0-9._%+-]+/\1webmaster@random.fr/g'

Спасибо за вашу помощь!

0 голосов
/ 18 октября 2018

Как уже упоминалось в комментарии, вам следует избегать синтаксического анализа данных JSON с помощью тексто-ориентированного синтаксического анализатора, например sed.

Однако в этом случае это просто строка, которая выглядит как JSON (и не является действительными данными json).).

Таким образом, возможный способ продвижения вперед - использовать sed:

sed -i -E 's/(_email[\\":]+)[a-z0-9.]+@[a-z0-9.]+/\1webmaster@random.fr/g' file

. Он заменит все адреса электронной почты после слова, заканчивающегося ключевым словом _email, строкой * 1011.*.

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