我正在尝试使用sed替换yaml文件中的新版本,但是我无法弄清楚此语句中缺少的内容。
我想转换
version: "x.x.x"
至
version: "z.z.z"
这是我当前的sed声明:
sed -i "" "s|version: "[[:digit:]].[[:digit:]].[[:digit:]]"\|version: "${VERSION}"|" file.yaml
您可以使用
sed -i "" 's|version: "[[:digit:]]\.[[:digit:]]\.[[:digit:]]"|version: "'"${VERSION}"'"|' file.yaml
要匹配一个或多个数字,您可以\{1,\}
在eacg之后使用范围量词[[:digit:]]
:
sed -i "" 's|version: "[[:digit:]]\{1,\}\.[[:digit:]]\{1,\}\.[[:digit:]]\{1,\}"|version: "'"${VERSION}"'"|' file.yaml
细节
version: "[[:digit:]]\.[[:digit:]]\.[[:digit:]]"
-LHS,matchs version:
,space 、、"
一个数字.
,,一个数字.
和一个数字(如果\{1,\}
使用数字,则为数字)version: "'"${VERSION}"'"
-RHS,替换,替换为version:
,空格"
,VERSION
可变内容和一个"
。您可以使用稍微缩短命令
sed -i "" 's|\(version: "\)[[:digit:]]\(\.[[:digit:]]\)\{2\}"|\1'"${VERSION}"'"|' file.yaml
其中\(version: "\)
被捕获到第1组中,并在RHS\1
中用于将其插入回去,重复.
和数字是由用\{2\}
(两次)量词量化的另一组完成的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句