2014-04-08 9 views
1

/etc/yum.repos.d/CentOS-Base.repo 내가나오지 :

은 = 포스트 그레스를 제외 추가 할

# CentOS-Base.repo 
# 
# The mirror system uses the connecting IP address of the client and the 
# update status of each mirror to pick mirrors that are updated to and 
# geographically close to the client. You should use this for CentOS updates 
# unless you are manually picking other mirrors. 
# 
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead. 
# 
# 

[base] 
name=CentOS-$releasever - Base 
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os 
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ 
gpgcheck=1 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 

#released updates 
[updates] 
name=CentOS-$releasever - Updates 
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates 
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ 
gpgcheck=1 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 

#additional packages that may be useful 
[extras] 
name=CentOS-$releasever - Extras 
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras 
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ 
gpgcheck=1 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 

#additional packages that extend functionality of existing packages 
[centosplus] 
name=CentOS-$releasever - Plus 
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus 
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ 
gpgcheck=1 
enabled=0 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 

#contrib - packages by Centos Users 
[contrib] 
name=CentOS-$releasever - Contrib 
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib 
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/ 
gpgcheck=1 
enabled=0 

파일 기반 및 업데이트 섹션에서 * = 포스트 그레스를 제외 추가 * 후 에서 [기재] 섹션 gpgkey 라인 I 오류를

sed: -e expression #1, char 16: unterminated `s' command 
012 얻을

파일을 변경하지 않고 표현식

sed '/^gpgkey/{s/.*/&\nexclude = postgres*/;:a;n;ba}' /etc/yum.repos.d/CetnOS-Base.repo 
를 이용한 SED

이 명령을 실행하면 스위치가 누락되었거나 식을 수정해야합니까?

+0

으로 여기에 오류가 없습니다. –

답변

1

나오지 사용하여 당신은 BSD를 사용하고있는 것으로 보인다 사용할 수 있습니다

sed -i.bak -e '/^gpgkey/{s/.*/&\nexclude = postgres*/;:a;n;ba;' -e '}' /etc/yum.repos.d/CetnOS-Base.repo 
+0

sed '/ \\ [base \\] /,/gpgkey =/{/ gpgkey =/s/$/\\'$ '\\ n''exclude = postgres * /;}'/etc/yum.repos .d/CentOS-Base.repo는 오류없이 실행되지만 파일에는 변경이 없습니다. 꼭두각시 매니페스트의 exec 리소스 내에서 사용하고 있습니다. –

+0

@AnadiMisra 파일을 변경하기 위해'-i' 옵션을 전달해야합니다. 'sed -i ...' – devnull

+0

아!고마워. 너는 두 번째 \ '$'이 무엇인지 설명 할 수 있니? 내가 알아낼 수있는 것부터 gpgkey = exclude = postgres *와 같은 임의의 문자열을 찾은 후에 추가 할 것을 말하고 있습니다 .-) –

0

별도의 -e 블록에 }에 나오지이 인라인을보십시오 :이 sed,

sed '/\(\[base\]\|\[updates\]\)/,/gpgkey/{/gpgkey/s/.*/&\nexclude=postgres*/}' /etc/yum.repos.d/CetnOS-Base.repo 
0

sed. 당신은 말할 수 있습니다 :

sed '/\[base\]/,/gpgkey=/{/gpgkey=/s/$/\'$'\n''exclude = postgres*/;}' filename 

[base] 섹션에 gpgkey=... 후 라인 exclude = postgres*를 추가 할 수 있습니다.

EDIT 설명 :

  • /\[base\]/,/gpgkey=/은 주소 만 매칭 어드레스에 대해 실행되는 명령의 그룹 gpgkey=
  • {/gpgkey=/s/$/\'$'\n''exclude = postgres*/;} 함유 한 개까지 [base] 함유 하나로부터 시작하여, 즉 라인의 범위와 일치

    : /gpgkey=/s/$/\'$'\n''exclude = postgres*/을 깨는

  • gpgkey=과 일치하는 줄에 s/$/\'$'\n''exclude = postgres*/이라는 치환을 수행합니다.
  • 위의 대체 코드는 $, 즉 줄의 끝과 일치합니다.
  • 바꾸기는 줄 바꿈이고 줄 바꿈을 생성하기위한 ANSI-C 인용 구문은 exclude = postgres*/
  • 입니다. GNU sed를 사용하지 않는 것 같으므로이 작업이 필요했습니다. 그렇지 않으면 \n이면 충분합니다. 즉,`--posix`를 사용하는 경우에도`GNU sed`에서 오류가 없으므로 /gpgkey=/s/$/\nexclude = postgres*/
  • 0

    sed '/\[base\]/,/gpgkey/{/gpgkey/s/.*/&\nexclude = postgres*/}' /etc/yum.repos.d/CetnOS-Base.repo