을 사용하여 명령줄에서 저장소 파일을 수동으로 편집하고 싶습니다 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