bash - 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\":{});
解决此问题的任何帮助表示赞赏
解决方案
正如评论中提到的,您应该避免使用面向文本的解析器解析 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
。
推荐阅读
- fail2ban - fail2ban:禁令还剩多少时间?
- sorting - 关于对jsp进行排序
- google-apps-script - GmailApp 到工作表中的 .showModalDialog 脚本?
- ios - 如何同时检索加速度计或陀螺仪数据等核心运动数据?
- docker - 如何在 Docker 中使用 chmod
- c# - Asp-page 标签助手总是重定向到同一页面
- vue.js - 未调用 vue-form-wizard beforeTabChange 回调
- javascript - 当 JSON 过长时 JSON.parse() 会抛出错误
- javascript - 如果我在可见视口内的网站中有内容,而正文中没有滚动条,如何更改高度?
- algorithm - CPLEX 目标函数声明