用sed命令和正则表达式替换包含引号的值

twohyjr

我正在尝试使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章