我有这个YAML文件:
openapi: 3.0.0
info:
title: Test
description: >-
This is the official REST API documentation for all available routes
provided by the **Test** plugin.
version: 2.0.0
servers:
- url: https://entwicklungsumgebung
components:
securitySchemes:
basicAuth:
type: http
在我的CI管道中,我试图修改第7行的版本。在文件中间,有多个名为test_version
或prod_version
的键不应被替换。为此,我编写了sed
命令:
sed -i '' 's/^version: .*/version: 3.0.0/' test.yml
最初,我没有在s/
之后使用^
,但是这也匹配了version之前的所有内容。现在,没有任何内容被替换。知道我做错了什么吗?
2条答案
按热度按时间whhtz7ly1#
您必须保留空格,因此您要么必须匹配整行,要么使用捕获组:
或者您可以只匹配
version
,但可能会匹配到不应该匹配的地方:一个更健壮的解决方案是使用一个可以解析YAML的工具,比如yq:
z0qdvdin2#
我会使用find..来查找所有YML文件。然后,在正则表达式中就不需要
^
了。作为预防措施,我还使用-i标志作为后缀,使用/g
表示“全局”,以防文件中不止一次提到version:
--编辑在替换中,也要在
version
--前保留白色以保留缩进因此,此文件之前:
输出: