sed 将 yaml 代码块替换为空

sed 将 yaml 代码块替换为空

我正在尝试使用 sed 从 yaml 文件中删除一段代码。到目前为止我所拥有的是下面的代码,但它不起作用。

sed -i 's/- node-service\/velocity_log_deployment((.|\n)*)//' config.yml

我要删除的代码是:

       - terraform/init_and_plan:
          name: terraform_plan
          context:
            - phdv-docker-hub-creds
            - phdv-aws
          terraform_version: <<pipeline.parameters.terraform_version>>
          working_directory: ~/project/infra
          persist_to_workspace_filepath_prefix: infra/
          requires:
            - package
# remove start
      - node-service/velocity_log_deployment:
          name: velocity_log_deployment
          repository_url: https://github.com/pizzahutuk/lambda-contentful-menu-sync
          requires:
            - terraform_apply
          context:
            - phdv-docker-hub-creds
            - phdv-aws
# remove end
      - terraform/init_and_apply:
          name: terraform_apply
          context:
            - phdv-docker-hub-creds
            - phdv-aws
          terraform_version: <<pipeline.parameters.terraform_version>>
          working_directory: ~/project/infra
          requires:
            - terraform_plan
          filters:
            branches:
              only: main

sed 替换后的结果:

       - terraform/init_and_plan:
          name: terraform_plan
          context:
            - phdv-docker-hub-creds
            - phdv-aws
          terraform_version: <<pipeline.parameters.terraform_version>>
          working_directory: ~/project/infra
          persist_to_workspace_filepath_prefix: infra/
          requires:
            - package
      - terraform/init_and_apply:
          name: terraform_apply
          context:
            - phdv-docker-hub-creds
            - phdv-aws
          terraform_version: <<pipeline.parameters.terraform_version>>
          working_directory: ~/project/infra
          requires:
            - terraform_plan
          filters:
            branches:
              only: main

答案1

诚实地;这是地形。这是一个巨大的软件,旨在帮助您通过代码部署基础设施;它使用明确定义的文件格式 YAML 来完成该任务。因此,保持这些文件语法完整非常重要。

尽管如此,您仍然选择使用不适合该语言的工具,sed即使用正则表达式来解析非常规语言,而不是实际“讲该语言”的工具。
这里最正确的方法是忽略使用所做的事情sed并仅使用,例如,如果您正在使用基斯柳克的yq,它只允许delete 元素。

yq -y 'del(.[] | select(."node-service/velocity_log_deployment"))' config.yml

应该做你想做的事。添加-i开关以就地更改文件。-y如果您使用的是,请省略yq

相关内容