sedを使用したrepoファイルの編集

sedを使用したrepoファイルの編集

を使用してコマンドラインからリポジトリファイルを手動で編集したいと思います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_

おすすめ記事