파일에 개행 문자가 포함된 패턴이 있습니다.
client_encryption_options:
enabled: false
... enabled
으로 설정하고 싶지만 아래 항목이어야 합니다 .true
enabled
client_encryption_options
grep을 사용하면 여러 줄을 검색할 수 없습니다. 이 목표를 어떻게 달성할 수 있나요?
답변1
글쎄, grep
이를 수정할 수도 없으므로 이 유틸리티는 처음부터 실행 가능하지 않습니다.
대신 GNU를 사용하세요 sed
:
$ sed '/^client_encryption_options:/,+1s/enabled:.*/enabled: true/' file
그러면 문자열로 시작하는 줄을 찾아 client_encryption_options:
해당 줄과 다음 줄에 대체를 적용합니다. 교체는 enabled:
문자열과 같은 줄에서 그 뒤에 오는 모든 항목을 대체합니다 enabled: true
.
교체는 두 행 모두에 적용되지만 enabled:.*
첫 번째 행에서 패턴을 찾을 수 없으므로 변경되지 않은 상태로 유지됩니다. 두 번째 줄은 (다음 텍스트와 관계없이 enabled:
) 무조건 변경됩니다.
답변2
그리고 sed
:
sed '/client_encryption_options:/{n;s/false/true/;}'
n
얻으라는 명령이다다음라인이 패턴 공간에 들어갑니다(현재 패턴 공간 내용을 인쇄하고 버린 후), s
예바꾸다.