我需要使用shell命令更新key2
文件中指定键(例如,yaml
)的值。我试图使用sed
,但只有当我有一个特定的值时它才起作用,例如,在本例中是TBD
。但是我想每次都更新这个值,而不考虑任何值。我的替换字符串也存储在一个变量中。有人能告诉我该用什么命令吗?
hash.yaml file
---
key1: val1
key2: <TBD>
key3:
- val3_1
- val3_2
这是我努力的,对我有用。但前提是我的搜索键是“待定”。
sed -i "s;<TBD>;$var;g" hash.yaml
最佳答案
您可以使用此sed
将键的任何值替换为存储在名为key2
的变量中的新值:
var='foobar'
sed -E "s~^([ \t]*key2:[ \t]*).*~\1$var~" hash.yml
key1: val1
key2: foobar
key3:
- val3_1
- val3_2
在表达式
$var
中,我们将^([ \t]*key2:[ \t]*).*
与可选空白在其前后的行开始处匹配。key2:
最终将匹配任何.*
的内容。如果要就地编辑文件,请为
key2
使用-i
标志:sed -i '' -E "s~^([ \t]*key2:[ \t]*).*~\1$val~" hash.yml
关于linux - 查找一个字符串,并用该字符串替换整行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40031789/