![Bash, 문자열 일치 후 다음 줄의 문자 뒤의 모든 내용 바꾸기](https://linux55.com/image/190315/Bash%2C%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%9D%BC%EC%B9%98%20%ED%9B%84%20%EB%8B%A4%EC%9D%8C%20%EC%A4%84%EC%9D%98%20%EB%AC%B8%EC%9E%90%20%EB%92%A4%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EB%82%B4%EC%9A%A9%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
내가 원하는 것은 일치하는 항목을 찾은 다음 다음 줄의 문자 뒤의 모든 항목을 바꾸는 것입니다.
파일 내용의 예:
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 확장입니다.