我有一个如下字符串。我想使用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
答案 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上对其进行测试,然后在结果确定时再将其添加回去。