问题描述
我有一个字符串,我想从匹配到第一个逗号之前删除所有匹配项:示例
[{"value":1,"btata":"15","Id":"17","","url":"","time":"222"{"value":1,"secId":"16","Id":"19","time":"20218 22status":""}
我想获得 Id:17 Id:19
我已经能够使用 sed -e 's/Id/_/g' -e 's/[^_]//g' -e 's/_/Id /g'
获得 Id,但直到逗号之前无法匹配。
解决方法
您可以使用 sed
来完成,但它需要两个表达式。本质上,您需要删除所有 '"'
字符,然后通过将它们替换为 ','
来拆分 '\n'
上的输入。第二个表达式只是定位以 Id
开头的行,例如
sed 's/"//g;s/,/\n/g' | sed -n /^Id/p
示例使用/输出
$ echo '[{value:1,btata:15,Id:17,url:,time:222{value:1,secId:16,Id:19,time:20218 22status:}' |
sed 's/"//g;s/,/\n/g' | sed -n /^Id/p
Id:17
Id:19
(注意:这一切都伴随着一个警告,你不应该用 shell 命令处理 json。建议使用像 jq
这样的 json 验证工具——尽管这不会出现或者是有效的 json)