(sed/awk)我需要从一个包含许多特殊字符的很长的compplicated输入中提取两个字符串之间的数字



我需要从一个包含许多特殊字符的很长的compplicated输入中提取两个字符串之间的数字,所以当使用sed或awk仅从"pk";(从下面的例子来看,输出应该是这样的:19473

所以我的输入看起来像这样:

{"pagination":{"next":0,"previous":0,"count":1,"current":1,"total_pages":1,"start_index":1,"end_index":1},"results":[{"pk":19473,"username":"someuser12.999name","name":"someuser12.999name","is_active":true,"last_login":null,"is_superuser":false,"groups":[],"groups_obj":[],"email":"someuser12.999name@domain.tld","avatar":"https://secure.gravatar.com/avatar/

您的示例不是有效的JSON,但您可能忘记了一些字符。

您可以选择将字符串视为一个字符串。在这种情况下,看看如何使用正则表达式与awk进行匹配/捕获。

从长远来看,我认为如果你能使用正确的json提取,你会更高兴。一个好的工具是jq这里的相同问题和例子。

在您的情况下,这将给出结果:

c:temp> type jsonstring.txt |  jq-win32.exe ".results | .[0] |.pk" 
19473

您的格式化json字符串在这里

{
"pagination": {
"next": 0,
"previous": 0,
"count": 1,
"current": 1,
"total_pages": 1,
"start_index": 1,
"end_index": 1
},
"results": [
{
"pk": 19473,
"username": "someuser12.999name",
"name": "someuser12.999name",
"is_active": true,
"last_login": null,
"is_superuser": false,
"groups": [],
"groups_obj": [],
"email": "someuser12.999name@domain.tld",
"avatar": "https://secure.gravatar.com/avatar/"
}
]
}

最新更新