【问题标题】:Use sed with jq in bash script在 bash 脚本中使用 sed 和 jq
【发布时间】:2020-05-23 15:29:21
【问题描述】:

如何使用 sed 和 jq 将键名中的 _ 替换为符号 a

{ "product_name":"kl" }

应该变成

{ "产品名称":"kl" }

在 bash 脚本中

【问题讨论】:

    标签: bash jq


    【解决方案1】:

    不需要sed;只需 jq 即可轻松完成:

    $ jq '{ productaname: .product_name }' <<<'{ "product_name":"kl" }'
    {"productaname":"kl"}
    

    如果你想在对象的所有键中用 a 替换下划线:

    $ jq 'with_entries(.key |= gsub("_"; "a"))' <<<'{ "product_name":"kl", "foo_bar":12 }'
    {"productaname":"kl","fooabar":12}
    

    来自with_entries的文档:

    to_entries, from_entries, with_entries

    这些函数在对象和键值对数组之间进行转换。如果to_entries 被传递一个对象,那么对于输入中的每个k:v 条目,输出数组都包含{"key": k, "value": v}

    from_entries 进行相反的转换,with_entries(foo)to_entries | map(foo) | from_entries 的简写,用于对对象的所有键和值进行一些操作。 from_entries 接受 key、Key、name、Name、value 和 Value 作为键。

    【讨论】:

    • @priyanshukumar 这样的东西需要放在你的问题中。
    • 这只是一个例子
    • 你有答案吗?
    • @priyanshukumar 如果它们都没有满足您的需求,那么您真的需要回到您的问题并使其更清晰。
    • 任何关于如何使用 with_entries @shawn 执行指定案例的示例