Bash, 문자열 일치 후 다음 줄의 문자 뒤의 모든 내용 바꾸기

Bash, 문자열 일치 후 다음 줄의 문자 뒤의 모든 내용 바꾸기

내가 원하는 것은 일치하는 항목을 찾은 다음 다음 줄의 문자 뒤의 모든 항목을 바꾸는 것입니다.

파일 내용의 예:

  super_service:
    app_version: 1.02
  duper_service:
    app_version: 4.0.1
  happy_service:
    app_version: 2.03
  turbo_service:
    app_version: 1.28.0

예상 결과: 내가 원하는 것은 duper_service 예제를 일치시킨 다음 "app_version:" 뒤의 모든 것을 내가 정의한 새 버전(예: 4.0.2)으로 바꾸는 것입니다. awk를 사용하여 이 작업을 수행할 수 있지만 변경 사항을 파일에 기록해야 합니다.

답변1

다음과 같이 작동하는 것 같습니다.

sed -i '/duper_service/!b;n;c\ \ \ \ app_version: 4.0.2' file.txt

답변2

sed좋은 후보인 것 같습니다:

sed -i '/^[[:space:]]*duper_service:/ { N; s/[^:]*$/ 4.0.2/ }' file.txt

설명: "duper_service:" 줄이 나타나면 줄 끝과 관계없이 다음 줄이 추가되고 콜론 뒤의 ( ) [^:]*$가 "4.0.2"로 대체됩니다.

-i옵션은 파일을 제자리에서 변경합니다. GNU sed 확장입니다.

관련 정보