我有一个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/

10-15 16:06