2013-09-25 131 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 

上述行可能適用於您。