sed를 사용하여 repo 파일 편집

sed를 사용하여 repo 파일 편집

을 사용하여 명령줄에서 저장소 파일을 수동으로 편집하고 싶습니다 sed. 편집하려는 저장소 이름을 기준으로 어떻게 해야 합니까?

enabled=1특정 저장소 이름(예: reponame-2)을 검색하고 해당 변경 사항에 따라 예를 들어 옵션을 검색하고 싶습니다.enabled=0

[repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_


[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_

답변1

Perl의 "단락 모드"("줄"이 연속적인 개행 문자로 정의되는 경우)는 이러한 목적에 이상적입니다:

$ perl -00pe 's/enabled=1/enabled=0/ if /\[repo-name1/' file [repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled=0
sslverify=0
proxy=_none_


[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_

또는 원본 파일을 직접 편집하세요.

perl -i -00pe 's/enabled=1/enabled=0/ if /\[repo-name1/' file 

또는 다음을 사용할 수 있습니다 awk.

$ awk -vRS='\n\n' -vORS='\n\n' '/\[repo-name1/{sub(/enabled=1/,"enabled=0")}1;' file 
[repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled=0
sslverify=0
proxy=_none_

[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_

최신 버전의 GNU-awk 또는 기타 awk지원이 있는 경우 -i다음을 수행하여 제자리에서 편집할 수 있습니다.

awk -iinplace -vRS='\n\n' -vORS='\n\n' '/\[repo-name1/{sub(/enabled=1/,"enabled=0")}1;' file 

awk또는 위 파일 끝에 빈 줄이 추가되는 것을 방지하려면 다음과 같이 좀 더 복잡한 작업을 수행할 수 있습니다.

$ awk -F= '/\[repo-name1/{a=1}/^\s*$/{a=0}a==1 && $1=="enabled"{$2=0}1;' file
[repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled 0
sslverify=0
proxy=_none_

[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_

답변2

이 같은:

sed -i '/repo-name1/{n;n;n;s/enabled=1/enabled=0/}' repos.txt

이 요구 사항은 enabled=항상 저장소 이름 뒤의 세 번째 줄에 있습니다.

답변3

아래와 같이 awk레코드 구분 기호를 이중 줄 바꿈으로 설정하여 어떤 방식으로든 단락 모드를 시뮬레이션할 수 있습니다 .perl테든의 답변:

awk 'BEGIN{RS="\n\n";OFS="\n"} \
     /repo-name1/{for(i=1;i<=NF;i++) if($i=="enabled=1") $i="enabled=0"}1' file

관련 정보