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
、これはdel
ete要素のみを受け入れます。
yq -y 'del(.[] | select(."node-service/velocity_log_deployment"))' config.yml
あなたが欲しいものをする必要があります。-i
ファイルを変更するには、スイッチを追加してください。-y
使用する場合は省略行くyq
。