我想在包含多个repos定义的文件中从命令行永久启用Linux repo。所以该文件看起来像:
[repo-first]
some config line
another config line
enabled=0
more config lines
[repo-second]
some config line
another config line
enabled=0
more config lines
我希望能够根据回购名称有选择地将'enable = 0'设置为'enable = 1'。
似乎有多种方法可以吸入文件和/或忽略行分隔符,包括-p0e,-0777,“BEGIN {undef $} ...”。到目前为止,我最好的猜测是:
perl -0777 -e -pi "BEGIN { undef $/ } s/(\[repo\-first\]\n(.*\n)*?enabled\=)0/$1\1/mg" /etc/yum.repos.d/repo-def-file
但很自然,这不起作用。想法?
答案 0 :(得分:3)
使用模块会更加方便,例如Config::Tiny
use strict;
use warnings;
use Config::Tiny;
my $conf = Config::Tiny->read( 'repo-def-file' );
$conf->{'repo-first'}{enabled} = 1;
$conf->write( 'repo-def-file' );
答案 1 :(得分:1)
正如所解释的,正则表达式通常是错误的方法,但它确实具有保留文件的顺序和结构的优势
所以,如果你必须,那么这将完成工作
perl -0777 -i -pe's/\[repo-first\][^[]+enabled=\K\d+/1/' repo-def-file