Shell命令更新配置文件

时间:2012-09-17 02:14:31

标签: linux bash shell unix

寻找一种在CentOS中自动启用yum存储库的方法。默认情况下,配置文件如下所示:

[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

注意enabled=0块中的[remi]。这就是需要翻开的东西。问题是我不能只搜索enable=0,因为remi-test块也有,但我不想启用测试仓库。

感谢。

5 个答案:

答案 0 :(得分:5)

试试这个:

sed -i '/\[remi\]/,/^ *\[/ s/enabled=0/enabled=1/' your_repo_file

其中:/[remi]/,/^ *[/告诉sed仅查找从[remi]到下一个repo条目的文本块,该条目以[开头。

答案 1 :(得分:2)

yum-config-manager [--enable|--disable] rhel-6-server-rpms

在RHEL中有效,你应该可以在CentOS中做同样的事情。从以下地址获取回购邮件名称:

yum repolist [all|enabled|disabled]

该命令将显示启用/未启用的功能,但在系统上的/etc/yum.repos.d/.repo文件中配置。

yum-config-manager是RHEL6上的yum-utils软件包的一部分,可能是EL发行版。

答案 2 :(得分:1)

sed(1)无法编辑文件,它会将编辑内容发送到其输出。要进行就地编辑,您需要提供-i(或--in-place)标记。此外,您正在做的是编辑包含[remi].*enabled的行,您刚刚找不到。您希望将替换限制为从[remi]开始的部分,该部分以下一个[结尾:

sed -i -e '/\[remi\]/,/^\[/s/enabled=0/enabled=1/' /etc/yum.repos.d/remi.repo

答案 3 :(得分:0)

sed -i '0,/enabled=0/s//enabled=1/' /etc/yum.repos.d/remi.repo

答案 4 :(得分:0)

awk 'BEGIN{prev=1;}{if($0~/remi-test/)prev=0;else if($0~/\[remi\]/)prev=1;if(prev &&$0~/enabled/)print "enabled=1";else print}' your_file

测试如下:

> cat temp
[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

> awk 'BEGIN{prev=1;}{if($0~/remi-test/)prev=0;else if($0~/\[remi\]/)prev=1;if(prev &&$0~/enabled/)print "enabled=1";else print}' temp
[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
>