首页 > 解决方案 > SED 电子邮件替换(sql 转储中的 json 值)

问题描述

我有一个存储一些订单的数据库。在我的订单表中,我有一个“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\":{});

解决此问题的任何帮助表示赞赏

标签: bashsed

解决方案


正如评论中提到的,您应该避免使用面向文本的解析器解析 JSON 数据,例如sed.

但是在这种情况下,它只是一个看起来像 JSON 的字符串(并且不是有效的 json 数据)。

因此,一种可能的前进方式是使用sed

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

_email这将用字符串替换关键字后的所有电子邮件地址webmaster@random.fr


推荐阅读