如何使用bash替换json中的文本

b1uwtaje  于 2022-11-26  发布在  其他
关注(0)|答案(3)|浏览(178)

我尝试在JSON文件中使用bash将 *qa_test_services * 替换为 test_services,有人能帮我吗?谢谢

JSON文件-变量.json

{
    "variable": {
        "qa_test_services": {
            "default": {
                "prod-test-1": {
                    "position": 0,
                    "service_name": "test-1-service"
                },
                "prod-test-2": {
                    "position": 1,
                    "service_name": "test-2-service"
                }
            }
        }
    }
}

bash -脚本

test_json="variables.json"
actual_text="qa_test_services"
replace_text="test_services"

SEARCH_LINE=`cat $test_json | grep $actual_text | sed 's/"//g' | sed 's/://g' | sed 's/{//g' | sed -e 's/  */ /g'`
echo $SEARCH_LINE
z2acfund

z2acfund1#

我会避免用面向行的工具来编辑json。像xml一样,它不会总是被很好地格式化。尝试使用jq;就像sed对json一样。

jq -f filter.jq variables.json

filter.jq

.variable |= with_entries(
    if .key == "qa_test_services" then
        .key = "test_services"
    else
        .
    end)

输出功率

{
  "variable": {
    "test_services": {
      "default": {
        "prod-test-1": {
          "position": 0,
          "service_name": "test-1-service"
        },
        "prod-test-2": {
          "position": 1,
          "service_name": "test-2-service"
        }
      }
    }
  }
}

使用bash变量

jq ".variable |= with_entries(
    if .key == \"$actual_text\" then
        .key = \"$replace_text\"
    else
        .
    end)" $test_json
rjjhvcjd

rjjhvcjd2#

如果您要替换的字符串正是该字符串,则只需使用以下简单的sed命令:

$ sed 's/qa_test_services/test_services/' variables.json
{
  "variable": {
    "test_services": {
      "default": {
        "prod-test-1": {
          "position": 0,
          "service_name": "test-1-service"
        },
        "prod-test-2": {
          "position": 1,
          "service_name": "test-2-service"
        }
      }
    }
  }
}

如果您对结果满意,可以将输出通过管道传输到其他文件:

sed 's/qa_test_services/test_services/' variables.json > replaced.json

或者指示sed就地修改文件:

sed -i .backup 's/qa_test_services/test_services/' variables.json

其中.backupsed创建的备份文件应使用的扩展名。

5cg8jx4n

5cg8jx4n3#

这是另一个使用转义字符的例子,因为我需要这个,以为它会帮助别人!

sed 's/\/sounds/\/apps\/soundboard\/sounds/' soundboard.json > test_json_new

相关问题