【发布时间】:2018-11-09 21:49:28
【问题描述】:
我有一个包含多行的文件,如以下字符串。我需要提取 id 和 obj 的值。
{"Class":"ZONE","id":"DEV100.ZN301","name":"3109 E BTM","zgroup":"EAST FLOOR 3","prog":"","members":[{"obj":"DEV300.WC3"},{"obj":"DEV300.WC4"},{"obj":"DEV300.WC7"},{"obj":"DEV300.WC10"}]}
我正在使用以下命令来获取输出:
[user@server ~]$ cat file.txt | grep "\"Class\":\"ZONE\"" | while IFS="," read -r a b c d e f ; do echo "$b$f";done | grep ZN301
输出:
"id":"DEV100.ZN301""members":[{"obj":"DEV300.WC3"},{"obj":"DEV300.WC4"},{"obj":"DEV300.WC7"},{"obj":"DEV300.WC10"}]}
我的目标是获得以下输出:
DEV100.ZN301 : DEV300.WC3 , DEV300.WC4 , DEV300.WC7 , DEV300.WC10
请帮帮我。谢谢!
【问题讨论】:
-
明智的做法是使用
jq。尝试使用不理解其语法的工具解析 JSON 天生就容易出错。 -
请记住,如果生成文件的程序突然启动,比如对键进行排序,以使行看起来像
{"Class":"ZONE","id":"DEV100.ZN301","members":[{"obj":"DEV300.WC3"},{"obj":"DEV300.WC4"},{"obj":"DEV300.WC7"},{"obj":"DEV300.WC10"}],"name":"3109 E BTM","prog":"","zgroup":"EAST FLOOR 3"},那么对于任何兼容的 JSON 解析器来说,这将具有完全相同的语义,但会破坏完全依赖于排序的代码。而这种事情可能发生在库版本更改而工具本身根本没有代码更新的情况下。