我需要使用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/

10-11 00:51