我有一个包含JSON对象的文件需要解析,类似于以下内容:
{
"_id" : ObjectId("523a58c1e4b09611f4c58a66"),
"_items" : [
{
"adGroupId" : NumberLong(1230610621),
"keywordId" : NumberLong("5458816773")
},
{
"adGroupId" : NumberLong(1230613681),
"keywordId" : NumberLong("3204196588")
},
{
"adGroupId" : NumberLong(1230613681),
"keywordId" : NumberLong("4340421772")
},
{
"adGroupId" : NumberLong(1230615571),
"keywordId" : NumberLong("10525630645")
},
{
"adGroupId" : NumberLong(1230617641),
"keywordId" : NumberLong("4178290208")
}
]}
我希望你能够取出NumberLong()中间的数字。一开始我只需要得到keywordId,我通过以下代码实现了它:
cat listado.txt |& perl -ne 'print "$1," if /\"keywordId\" : NumberLong\(\"?(\d*)\"?\)/' keywordIds.txt
这生成了一个以逗号分隔的数字文件。现在我也需要广告组id,所以我正在尝试以下匹配正则表达式,但没有成功:
cat ./work/listado.txt |& perl -ne 'print "$1-$2," if /\"adGroupId\" : NumberLong\(\"?(\d*)\"?\),\s*\"keywordId\" : NumberLong\(\"?(\d*)\"?\)/m'
正则表达式匹配了,但我认为perl没有进行多行匹配,即使我使用了/m。你有什么想法吗?
perl -n一次只读取一行。如果您只匹配一行,则使用多行正则表达式也无济于事。 - Barmar