awk基础-读取.ini配置文件中的某段

从一个配置文件中读取其中的一段是很常见的需求,很多时候还需要读取满足条件的一段,然后修改该段中的某一行。

假如如下ini配置文件:

[base]
name=os_repo
baseurl=https://xxx/centos/$releasever/os/$basearch
gpgcheck=0

enable=1

[mysql]
name=mysql_repo
baseurl=https://xxx/mysql-repo/yum/mysql-5.7-community/el/$releasever/$basearch

gpgcheck=0
enable=1

[epel]
name=epel_repo
baseurl=https://xxx/epel/$releasever/$basearch
gpgcheck=0
enable=1
[percona]
name=percona_repo
baseurl = https://xxx/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0

读取其中的[mysql]段落部分:

awk '
    index($0,"[mysql]"){
        print;
        while( (getline)>0 ){
            if(/\[.*\]/){ exit }
            print
        }
}' a.txt

index()判断是否读取到了[mysql],如果是,则在循环内不断使用getline读取下一行,直到遇到包含[xxxxx]的行,表示本段到此结束。