【问题标题】:How to use jq with argument variable to replace value如何使用带参数变量的 jq 来替换值
【发布时间】:2021-08-23 20:02:58
【问题描述】:

我想在 JSON 文件的现有值中添加前缀和后缀。

这里是示例 test.json 文件 -

     "directory": [
        {
          "start_datetime": "1990-07-20 07:45:58",
          "end_datetime": "1990-07-20 07:45:58",
          "file_name": "N11",
        },
        {
          "start_datetime": "1990-07-20 07:45:58",
          "end_datetime": "1990-07-20 07:45:58",
          "file_name": "N12",
        }
]

这是我正在执行的命令 -

export prefix="sample"
jq -c  --arg prefix "$prefix" '(.directory[].file_name |= "AWS_$prefix_\(.)_output.json")' test.json

这是预期的输出 -

     "directory": [
        {
          "start_datetime": "1990-07-20 07:45:58",
          "end_datetime": "1990-07-20 07:45:58",
          "file_name": "AWS_sample_N11_output.json",
        },
        {
          "start_datetime": "1990-07-20 07:45:58",
          "end_datetime": "1990-07-20 07:45:58",
          "file_name": "AWS_sample_N12_output.json",
        }
]

我给出的命令不起作用。请帮我解决这个问题。

【问题讨论】:

  • 输入输出文件都是无效的json文件。

标签: jq


【解决方案1】:

变量不在双引号中展开。使用+ 运算符连接字符串:

'(.directory[].file_name |= "AWS_" + $prefix + "_\(.)_output.json")'

或者使用字符串插值\(...):

'(.directory[].file_name |= "AWS_\($prefix)_\(.)_output.json")'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2022-01-15
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多