1

のみで最初の一致の後にテキストを追加する方法はありますsedか? 私はこのようなものを持っていますが、テキストは2行ごとに挿入されます:

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

アップデート:

必要な出力 -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*
...
4

3 に答える 3

2

awkに加えての解決策sed

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

検索が見つかった場合はf=0、テキストを追加して を設定しf=1ます。これにより、結局、テキストを追加できなくなりますpriority

于 2013-09-25T09:20:39.573 に答える
1
sed  '/priority/{x;/1/{x;b};s/^/1/;x;s/.*/&\nexclude = php*/}' file

上記の行はあなたのために働くかもしれません。

于 2013-09-25T09:26:54.553 に答える