我有一个yaml文件,需要在脚本中使用sed命令进行更新。
这是文件:
> server_options:
> key1: value1
> key2: value2
> key3: value3
> key4: value4
>
>
> client_options:
> key5: value5
> key6: value6
> key2: value8
> key3: value3
> # key4: value4
> # key7: value7
输出应为:
> server_options:
> key1: value1
> key2: xxx
> key3: value3
> key4: yyy
>
>
> client_options:
> key5: value5
> key6: value6
> key2: value8
> key3: value3
> # key4: value4
> # key7: value7
这些键由制表符预先固定,我只是不想更新首次出现的key2和key4的值。我在这里先向您的帮助表示感谢!
最佳答案
尝试这个:
sed -i '0,/^\([[:space:]]*key2: *\).*/s//\1xxx/;0,/\([[:space:]]*key4: *\).*/s//\1yyy/;' file
0
地址要匹配以下模式的首次出现/^\([[:space:]]key2: \).*/
:搜索并捕获零个或更多的空格或制表符,后跟key2:
s//
:替换匹配字符串...具有捕获的密钥和新值
与第二次替换相同。
-i
标志用于在适当位置编辑文件。关于linux - 使用sed替换yaml文件中的键/值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45025100/