我有以下json輸入... "somefield":"somevalue", "time":"timevalue", "anotherfield":"value" ...在我的ksh腳本中,我希望將timevalue替換為我的值。所以我用工作組創(chuàng)建了這個正則表達(dá)式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" ...但是...我不能用數(shù)字代替,因?yàn)閜erl用數(shù)字定義組..所以這個顯然不起作用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" ...但我敢肯定,有一種更好,更優(yōu)雅的方法
2 回答

MMMHUHU
TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個贊
雖然您可以使用正則表達(dá)式來執(zhí)行此操作,但是使用正確的工具會容易得多
jq '.time="20:00:00"' somefile.json
如果您特別希望使用Perl,Perl的核心發(fā)行版自2011年起就包含JSON解析器,因此您可以執(zhí)行以下操作:
perl -MJSON::PP=decode_json,encode_json -0 -E '$j = decode_json(<>); $j->{time} = "20:00:00"; say encode_json($j)' somefile.json
添加回答
舉報(bào)
0/150
提交
取消