[英]Updating a yaml with a string containing special characters using sed
我有一个 yaml 文件,需要使用包含特殊字符的字符串进行更新。 这是我使用的命令,但出现 sed 表达式错误
Yaml 文件(文件):
Key1:
Key2:
对于 $var(环境变量)没有特殊字符的命令:
sed -i '0,/^\([[:space:]]*Key1: *\).*/s//\1'$var'/;' file
$var 的值:
fkugoiuhoiuyflkbbui/qy++bfv7J3c
我得到的错误是:
sed: -e expression #1, char 154: unknown option to `s'
我试图弄清楚如何才能使它正常工作。 任何帮助是极大的赞赏。 谢谢!
sed
的默认分隔符与变量中的/
冲突。 您将需要设置不同的分隔符,此外,单引号将不允许变量扩展。
你可以试试这个sed
$ sed "\|Key1|s|$|'$var'|" input_file
Key1: 'fkugoiuhoiuyflkbbui/qy++bfv7J3c'
Key2:
无论您选择什么s///
分隔符,这个问题都可能发生。 正确的解决方案是处理数据中出现的任何分隔符
escaped=${var//\//\\\/} # escape all slashes
sed -i '0,/^\([[:space:]]*Key1: *\).*/s//\1'"${escaped}"'/;' file
打破它:
${parameter/pattern/string}
“搜索和替换”形式的Shell 参数扩展pattern
以/
开头,则它是全局搜索和替换\/
,它是一个正斜杠:它需要被转义,以便它不会被解释为模式和字符串之间的分隔符。/
实际上将模式和替换字符串分开\\\/
: \\
是文字反斜杠(需要进入 sed 命令),最后\/
是文字斜杠。使用 YAML 处理工具yq ,我们可以编写
yq -i eval '.Key1 = "'"$var"'"' file
这是使用 yq 的“go”实现
$ yq --version yq (https://github.com/mikefarah/yq/) version 4.25.1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.