
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
.