【发布时间】:2018-10-20 09:00:01
【问题描述】:
我有以下 JSON 输入
... "somefield":"somevalue", "time":"timevalue", "anotherfield":"value" ...
在我的 KornShell (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" ...
但我确信有更好、更优雅的方式来做到这一点。
【问题讨论】:
-
更好更优雅的方法是使用 JSON 解析器...