sed cut grep linux 命令输出

问题描述

我有一个字符串,我想从匹配到第一个逗号之前删除所有匹配项:示例

[{"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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...