Json 尽可能多地打印两个图案之间的图案(不包括)

Json 尽可能多地打印两个图案之间的图案(不包括),json,scripting,jq,Json,Scripting,Jq,尽可能多地打印两个图案之间的图案(不包括) 输入文件 尝试过但只在第一次打印 $ sed '1,/devices/d;/]/,$d' /tmp/sn310_dev.out "Samsung SSD 970 PRO 1TB XXXXXXXXXXXXXXX 01", "Samsung SSD 970 PRO 1TB

尽可能多地打印两个图案之间的图案(不包括)

输入文件

尝试过但只在第一次打印

$ sed '1,/devices/d;/]/,$d'  /tmp/sn310_dev.out
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01",
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01",
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01"

理想情况下,您的输入将是json,但如果这是文件的内容,jq将无法在不调整输入的情况下作为json进行处理。幸运的是,没有太多,只需将文件作为字符串读取,“tweak it”,解析来自JSON的
并获得所需的字段

$ cat file.in
                "3": {
                    "cpumask": "0x000000003C000000",
                    "devices": [
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01",
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01",
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01"
                    ]
                },
                "2": {
                    "cpumask": "0x0000000000060000",
                    "devices": [
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01",
                        "Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01"
                    ]
                },
$ </tmp/file.in jq -Rsr '"{\(sub("\\},$"; "}"))}" | fromjson[].devices[]' >/tmp/sn310_dev.out
$ cat /tmp/sn310_dev.out
Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01
Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01
Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01
Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01
Samsung SSD 970 PRO 1TB               XXXXXXXXXXXXXXX     01
}
替换尾随的
},
并将所有内容包装在
{}
中,使其看起来像一个json对象

fromjson[].devices[]
将json对象字符串解析为一个值,然后从对象中提取值,并从每个值'
设备
属性中提取值


如果这是一个json文件,那么专家们总是建议使用
jq
之类的工具来处理它,以便更好地理解它。如果您的机器上安装了jq,请告诉我们好吗?或者你可以安装它,解决方案可以在这里,谢谢你。是的,它是/可以安装。你可以发布整个JSON可用吗?
“3”和
“2”是否嵌套在其他内容下
"{\(sub("\\},$"; "}"))}"
fromjson[].devices[]