如何在 bash json 中使用 grep 查找空名称?

How can I find an empty name using grep in bash json?

如何使用 grep 查找空名称?

我的 json 个文件

{
    "IDS": [
        {
            "digest": "sha256:b97"
        },
        {
            "digest": "sha256:d25"
        },
        {
            "digest": "sha256:c40",
            "tag": "0"
        }
    ]
}

我想使用 grep 查找不带标签的摘要文件。

我想要这个结果。

sha256:b97
sha256:d25

我用过jq'has(tag) == false',但是我的环境性质用jq是不行的

不知道没有jq,python等工具怎么用

感谢您阅读我的post。 XD

不要为此使用正则表达式。使用 JSON 解析器:

jq -r '.IDS[] | select(has("tag") | not) | .digest' file.json

如果不允许您使用正确的工具,您的雇主就不会让您完成工作。

如果 jq 不可行,awk 的替代方案可能是:

awk '/"digest"[^,]+$/{gsub(/"/,""); print $NF}' input.json

如果输入被缩小:

$ echo $foo
{ "IDS": [ { "digest": "sha256:b97" }, { "digest": "sha256:d25" }, { "digest": "sha256:c40", "tag": "0" } ] }
$
$ awk -vRS='[{}]' 'NF==2 && [=11=] ~ /"digest"/{gsub(/"/,"");print $NF}' <<< "$foo"
sha256:b97
sha256:d25