Windows 版本在 jqplay.org 有效的地方失败

Windows version fails where jqplay.org works

我一直在使用 jq 来解析 AWS cli 的输出。

输出看起来像这样..

{
"Vpcs": [
    {
        "CidrBlock": "10.29.19.64/26",
        "State": "available",
        "VpcId": "vpc-0ba51bd29c41d41",
        "IsDefault": false,
        "Tags": [
            {
                "Key": "Name",
                "Value": "CloudEndure-Europe-Development"
            }
        ]
    }
]}

我正在使用的脚本如下所示..

.Vpcs[] | [.VpcId, .CidrBlock,   (.Tags[]|select(.Key=="Name")|.Value)]

如果我 运行 它在 Windows 下,它会像这样失败。

jq: error: Name/0 is not defined at , line 1: .Vpcs[] | [.VpcId, .CidrBlock, (.Tags[]|select(.Key==Name)|.Value)] jq: 1 compile error

但它在 jqplay.org 中工作正常。

任何想法,关于 Windows 我正在使用 jq-1.6。

谢谢

布鲁斯.

正确的jq程序是

.Vpcs[] | [.VpcId, .CidrBlock, ( .Tags[] | select( .Key == "Name" ) | .Value ) ]

您没有显示您使用的命令,但您向 jq 提供了以下内容:

.Vpcs[] | [.VpcId, .CidrBlock, ( .Tags[] | select( .Key == Name ) | .Value ) ]

这是不正确的。 (注意遗漏的引号。)

你不仅没有提供你使用的命令,你没有指定它是否被提供给 Windows API (CreateProcess), Windows Shell (cmd) 或幂 Shell.

我猜 cmd。为了向jq提供上述程序,可以使用如下cmd命令:

jq ".Vpcs[] | [.VpcId, .CidrBlock, ( .Tags[] | select( .Key == \"Name\" ) | .Value ) ]" file.json

我不同意 ikegami 关于 [he/she?] 提供的 CMD 命令,因为用于 CMD 转义的字符是 ^,而不是像 [=19] 那样的 \ =]++。我希望这会起作用(我不想在我的土豆上测试它):

jq .Vpcs[] | [.VpcId, .CidrBlock, ( .Tags[] | select( .Key == "Name" ) | .Value ) ] file.json

或者这个:

jq .Vpcs[] | [.VpcId, .CidrBlock, ( .Tags[] | select( .Key == ^"Name^" ) | .Value ) ] file.json