2013-09-25 128 views
1

第一场比赛后有没有办法在sed之后追加一个文字?我有这样的事情,但是在插入文本每下联:SED:第一场比赛后追加

sed -e '0,/priority/a\exclude = php*' /etc/yum.repos.d/epel.repo 

文件

$ cat /etc/yum.repos.d/epel.repo 
[epel] 
name=Extra Packages for Enterprise Linux 6 - $basearch 
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch 
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch 
failovermethod=priority 
enabled=1 
gpgcheck=1 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 
priority=3 

[epel-debuginfo] 
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug 
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug 
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch 
failovermethod=priority 
enabled=0 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 
gpgcheck=1 
priority=3 

[epel-source] 
name=Extra Packages for Enterprise Linux 6 - $basearch - Source 
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS 
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch 
failovermethod=priority 
enabled=0 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 
gpgcheck=1 
priority=3 

UPDATE:

所需的输出 - exclude = php*应仅在该回购( [epel]):

$ cat /etc/yum.repos.d/epel.repo 
[epel] 
name=Extra Packages for Enterprise Linux 6 - $basearch 
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch 
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch 
failovermethod=priority 
enabled=1 
gpgcheck=1 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 
priority=3 
exclude = php* 
... 
+0

你想在哪里新线?您显示的命令清楚地在指定范围内的每一行之后添加该行。 –

+0

我已更新我的问题。谢谢 – HTF

回答

4

你可以说:

sed '/^priority/{s/.*/&\nexclude = php*/;:a;n;ba}' /etc/yum.repos.d/epel.repo 
+0

不错的标签用法,聪明的解决方案!比我的简单。 +1 – Kent

+0

你能否解释一下这些选项是做什么的?:a; n; ba' - 看起来这个命令在没有它们的情况下工作? – HTF

+0

@HTF否,如果没有突出显示的部分,该行将被添加到以'priority'开头的所有行中。见[this](http://www.gnu.org/software/sed/manual/sed.html#Programming-Commands)。 – devnull

2

awk除了sed

awk '/^priority/ && !f {$0=$0 RS "nexclude = php*";f=1}1' file 

解决方案。如果搜索没有发现f=0,然后添加文本和设置f=1。这可以防止在添加文字后全部为priority

+0

OP提到** only与sed **。 – Kent

+0

我知道,但它总是很好的变化,它可能是OP不知道'awk'可能。加'awk'代码可能更易于理解/阅读,与'sed' – Jotne

+0

中的代码相比较好点。我同意。 – Kent

1
sed '/priority/{x;/1/{x;b};s/^/1/;x;s/.*/&\nexclude = php*/}' file 

上述行可能适用于您。