我有以下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
- 2 回答
- 0 关注
- 264 浏览
添加回答
举报
0/150
提交
取消