我需要使用shell命令更新key2
文件中的特定键(例如yaml
)的值。我正在尝试使用sed
,但只有在我有特定值时它才有效,例如,在这种情况下为TBD
。但是我希望每次更新值而不管任何值。我的替换字符串也存储在变量中。任何人都可以建议我使用什么命令?
hash.yaml file
---
key1: val1
key2: <TBD>
key3:
- val3_1
- val3_2
这是我尝试过的,也适合我。但只有我有&#34; TBD&#34;作为我的搜索键。
sed -i "s;<TBD>;$var;g" hash.yaml
答案 0 :(得分:1)
您可以使用此sed
将键key2
的任何值替换为存储在名为$var
的变量中的新值:
var='foobar'
sed -E "s~^([ \t]*key2:[ \t]*).*~\1$var~" hash.yml
key1: val1
key2: foobar
key3:
- val3_1
- val3_2
在表达式^([ \t]*key2:[ \t]*).*
中,我们在第一行的key2:
与之前和之后的可选空格匹配。 .*
最后会匹配key2
的所有内容。
如果您想就地编辑文件,请使用-i
的{{1}}标记:
sed
答案 1 :(得分:0)
在perl中使用正确的YAML解析器(适合正确工作的正确工具......):
#!/usr/bin/perl
use Config::YAML;
use YAML::XS qw/DumpFile/;
my $ds = Config::YAML->new(
config => "hash.yaml"
);
$ds->{key2} = 'FOOBAR';
DumpFile("./new.yaml", $ds);
然后,
cat new.yaml