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それにもかかわらず、実際には「言語を話す」ツールではなく、正規表現を使用してフレームワークに縛られない言語を解析する言語に適していないツールを使用することを選択しています。
ここで最も正しいアプローチは、usingが何をしているのかを無視してsed使用することです。キースリュックyq、これはdelete要素のみを受け入れます。

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

あなたが欲しいものをする必要があります。-iファイルを変更するには、スイッチを追加してください。-y使用する場合は省略行くyq

おすすめ記事