使用sed替换字符串

时间:2019-02-27 07:26:56

标签: linux unix 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

1 个答案:

答案 0 :(得分:0)

尝试一下:

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上对其进行测试,然后在结果确定时再将其添加回去。