如何通过shell 不用jq 将1.json 中相同对象的值赋值给2.json 同名的对象值
时间: 2024-10-18 10:05:58 浏览: 35
在Shell脚本中,如果你想要将`1.json`文件中相同对象的值复制到`2.json`中相应的位置,而不使用`jq`这样的JSON处理工具,你可以使用`awk`或者`sed`命令配合一些文本操作来实现。这里假设两份JSON文件都是键值对形式的简单对象,并且有相同的结构。
首先,你需要确保两个文件都已经存在于当前目录下。下面是一个简单的步骤:
1. 使用`cat`命令读取`1.json`的内容并存储在一个变量中:
```sh
json_1=$(cat 1.json)
```
2. 使用`awk`或`sed`遍历`json_1`内容,提取需要复制的键及其对应的值。例如,如果你想基于键`key_name`做匹配:
- awk (适用于字段分割明确的情况):
```sh
json_2=$(echo "$json_1" | awk -F'"' '{for (i=4; i<=NF; i+=2) if ($i == "key_name") print $i+1}' | sed 's/"//g')
```
- jq (如果`jq`可用,因为你在询问不使用它,这里仅作示例):
```sh
# 使用jq会更直接
json_2=$(jq '.key_name' 1.json)
```
3. 然后在`2.json`中替换相应的值:
```sh
while read -r key value; do
sed -i "s/\(\\"key_name\": \".*\"\)/\1 \"$value\"/g" 2.json;
done < <(echo "$json_2")
```
或者,如果你使用的是awk:
```sh
awk -v val="$json_2" '{if ($0 ~ /"key_name":/) {gsub(/"key_name":/, "key_name": val); print}}' 2.json > temp && mv temp 2.json
```
这将会在`2.json`中找到所有匹配`key_name`的地方,并替换其值。请注意,这个脚本假设`key_name`总是存在的,如果没有,则需要添加适当的错误检查。
阅读全文