为了账号安全,请及时绑定邮箱和手机立即绑定

用组替换perl正则表达式

用组替换perl正则表达式

郎朗坤 2021-04-06 12:33:57
我有以下json输入... "somefield":"somevalue", "time":"timevalue", "anotherfield":"value" ...在我的ksh脚本中,我希望将timevalue替换为我的值。所以我用工作组创建了这个正则表达式data=`cat somefile.json`echo $data | perl -pe "s|(.*time\"\s*\:\s*\").*?(\".*)|\1%TIME%\2|g" | another-script.sh... "somefield":"somevalue", "time":"%TIME%", "anotherfield":"value" ...但是...我不能用数字代替,因为perl用数字定义组..所以这个显然不起作用perl -pe "s|(.*time\"\s*\:\s*\").*?(\".*)|\120:00:00\2|g"我可以通过两步替换来克服这个问题perl -pe "s|(.*time\"\s*\:\s*\").*?(\".*)|\1%TIME%\2|g" | perl -pe "s|%TIME%|20:00:00|"... "somefield":"somevalue", "time":"20:00:00", "anotherfield":"value" ...但我敢肯定,有一种更好,更优雅的方法
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

虽然您可以使用正则表达式执行此操作,但是使用正确的工具会容易得多

jq '.time="20:00:00"' somefile.json

如果您特别希望使用Perl,Perl的核心发行版自2011年起就包含JSON解析器,因此您可以执行以下操作:

perl -MJSON::PP=decode_json,encode_json -0 -E '$j = decode_json(<>); $j->{time} = "20:00:00"; say encode_json($j)' somefile.json


查看完整回答
反对 回复 2021-04-16
  • 2 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信