我有一个json文件test.json,它{"content":[{"reader":{"name":"mysqlreader","parameter":{"username":"root","connection":{{"querySql":["select a < ${param_date}"],"jdbcUrl":["aaa"]}}}}}]}, 我希望有一句shell指令,可以将这个json中的querySql字段中的${param_date}替换为今天日期的YYYY-MM-DD并保存在这个文件。
时间: 2023-07-02 20:23:39 浏览: 82
可以使用jq和sed命令结合实现。以下是示例的shell指令:
```bash
TODAY=$(date +%Y-%m-%d)
jq '.content[].reader.parameter.connection.querySql |= map(if . == "select a < \${param_date}" then "select a < '$TODAY'" else . end)' test.json | sed 's/\\//g' > test_new.json
```
解释:
- `TODAY=$(date +%Y-%m-%d)`:获取今天的日期并保存在`TODAY`变量中。
- `jq`命令用于解析JSON文件。`'.content[].reader.parameter.connection.querySql'`表示选取JSON文件中`querySql`字段的值。`map(if . == "select a < \${param_date}" then "select a < '$TODAY'" else . end)`表示对`querySql`字段的每个元素进行替换操作。如果该元素的值等于`"select a < ${param_date}"`,则用`"select a < '$TODAY'"`替换;否则不做任何操作。
- `sed 's/\\//g'`命令用于去除转义字符`\`,因为`querySql`字段中的`${param_date}`是被转义的。
- `> test_new.json`表示将处理后的JSON文件保存在`test_new.json`中。如果想直接在原文件中修改,可以使用`-i`选项。
注意,如果你的系统不支持`date +%Y-%m-%d`命令,可以尝试使用其他方式获取当前日期。
阅读全文