首页 > 解决方案 > 使用 sed 我需要替换值

问题描述

{
    "test.yaml": "# Copyright (c) 2019-2020 .\n# All Rights Reserved.\n#\n#\n\trace1:\n  - trace-id:\n      - \"immm-0555555555\"\n      - \"mncid-6666666666\"\n    test-service:\n      - \"test-data\"\n    proposed-date: 2019-06-26T16:32:52\n    start-date: 2019-06-27T10:00:00\n    end-date: 2050-06-27T10:30:00\n    test-type: \"HIGH\""
}

以上是json内容,基本上我需要更新startdate enddate提出日期我使用sed命令更新

sed -i -e 's/start-date: .*\\n/start-date: 2013-06-27T10:00:00\\n/' /dummyfile.json

此命令执行后

{
    "test.yaml": "# Copyright (c) 2019-2020 .\n# All Rights Reserved.\n#\n#\n\trace1:\n  - trace-id:\n      - \"immm-0555555555\"\n      - \"mncid-6666666666\"\n    test-service:\n      - \"test-data\"\n    proposed-date: 2019-06-26T16:32:52\n    start-date: 2013-06-27T10:00:00\n       test-type: \"HIGH\""
}

但是像这个结束日期这样的更新也被删除了

标签: shellsedjq

解决方案


您的 JSON 看起来不是 100% 有效,但使用有效的 JSON,请使用 jq 例如:

jq '.start-date="2013-06-27T10:00:00" | .end-date="2013-06-27T10:00:00" | .proposed-date="2013-06-27T10:00:00"' dummy-file.json

推荐阅读