두 개의 서로 다른 디렉터리에 거의 동일한 두 개의 구성 파일이 있습니다.
## file1.conf ##
tunnel:
enable: true
interval: 20
public: false
loop:
enable: false
interval: 20
public: false
link:
enable: true
interval: 20
public: false
## file2.conf ##
tunnel:
enable: true
interval: 20
public: false
loop:
interval: 20
enable: false
public: false
link:
enable: true
interval: 20
public: false
이제 난 바꾸고 싶어활성화됨: 거짓도착하다활성화됨: 사실하지만 오직반지두 파일의 섹션. 하나의 명령 세트만 사용하여 이 두 파일을 어떻게 처리할 수 있습니까?
답변1
이는 내부 편집 을 사용하여 수행할 수 있습니다 sed -i
.
sed -i '/^loop:/,/^$/ { s/enable:.*$/enable: true/ }' file1.conf file2.conf
명령은 두 가지 주요 부분으로 나뉩니다.
/^loop:/,/^$/ { .... }
{...}
이는 빈 줄로 시작하고 끝나는 내용 으로 내용을 제한한다는 의미입니다 .loop:
안에 우리가 있어요
s/enable:.*$/enable: true/
이는 enable:
라인이 true로 설정되도록 보장합니다.
결과적으로 빈 줄로 시작하고 끝나는 모든 줄이 다음과 같이 다시 작성 file1.conf
되도록 다시 작성합니다.file2.conf
loop:
enable
enable: true
답변2
전체 블록을 구문 분석할 필요가 없습니다.
sed -i '/loop/{:a;n;/enable/s/false/true/;Ta;}' file1.conf file2.conf