用组替换perl正则表达式

我有以下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" ...

但我敢肯定,有一种更好,更优雅的方法


郎朗坤
浏览 265回答 2
2回答

MMMHUHU

虽然您可以使用正则表达式来执行此操作,但是使用正确的工具会容易得多jq&nbsp;'.time="20:00:00"'&nbsp;somefile.json如果您特别希望使用Perl,Perl的核心发行版自2011年起就包含JSON解析器,因此您可以执行以下操作:perl&nbsp;-MJSON::PP=decode_json,encode_json&nbsp;-0&nbsp;-E&nbsp;'$j&nbsp;=&nbsp;decode_json(<>);&nbsp;$j->{time}&nbsp;=&nbsp;"20:00:00";&nbsp;say&nbsp;encode_json($j)'&nbsp;somefile.json
打开App,查看更多内容
随时随地看视频慕课网APP