首页 > 解决方案 > 使用 sed 替换字符串

问题描述

我有一个字符串如下。使用 sed 我想用“66666”输入字符串替换名称后的值详细信息:“用户”和密码:

        name: "user"
        value: "55555"
        username: "test"
        value: "77777"
        password : "55555"

预期输出:

        name: "user"
        value: "66666"
        username: "test"
        value: "77777"
        password : "66666"

我尝试了以下但没有奏效。它只是替换密码而不是名称后的值

sed -i -e 's/\(password\|name: "[^"]*"{\n}value\): "[^"]*"/\1: "66666"/' test.txt

标签: linuxunixsed

解决方案


尝试这个:

sed -e '/name: *"user"/{' -e ':a;' -e 'N;/password *:/!ba;' -e 's/\(value *: *\)"[^"]*/\1"66666/;s/\(password *: *\)"[^"]*/\1"66666/;}' test.txt
        name: "user"
        value: "66666"
        username: "test"
        value: "77777"
        password : "66666"

sed是一个流编辑器,默认情况下它分别读取和处理每一行。
在这里,我曾经N阅读并附加下一行,并替换其中的内容。
我删除了-i开关,所以你可以先在 shell 上测试它,当结果看起来不错时,你可以将它添加回来。


推荐阅读