を使用してコマンドラインからリポジトリファイルを手動で編集したいと思いますsed
。編集するリポジトリ名に基づいてどうすればよいですか?
enabled=1
特定のリポジトリ名(例:reponame-2)を検索し、その変更に応じてたとえばオプションを検索したいと思います。enabled=0
[repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_
[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_
ベストアンサー1
Perlの「短絡モード」(「行」が連続した改行文字として定義されている場合)は、この目的に最適です。
$ perl -00pe 's/enabled=1/enabled=0/ if /\[repo-name1/' file [repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled=0
sslverify=0
proxy=_none_
[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_
または、ソースファイルを直接編集してください。
perl -i -00pe 's/enabled=1/enabled=0/ if /\[repo-name1/' file
または、次のものを使用できますawk
。
$ awk -vRS='\n\n' -vORS='\n\n' '/\[repo-name1/{sub(/enabled=1/,"enabled=0")}1;' file
[repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled=0
sslverify=0
proxy=_none_
[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_
最新バージョンのGNU-awkまたはその他のawk
サポートがある場合は、-i
次のようにしてその場で編集できます。
awk -iinplace -vRS='\n\n' -vORS='\n\n' '/\[repo-name1/{sub(/enabled=1/,"enabled=0")}1;' file
awk
または、上記のファイルの末尾に空白行が追加されないようにするには、次のようなより複雑な操作を実行できます。
$ awk -F= '/\[repo-name1/{a=1}/^\s*$/{a=0}a==1 && $1=="enabled"{$2=0}1;' file
[repo-name1]
name=repo-name1
baseurl=http://linktomyrepo.com
enabled 0
sslverify=0
proxy=_none_
[repo-name2]
name=repo-name2
baseurl=http://linktomyrepo.com
enabled=1
sslverify=0
proxy=_none_