美文网首页
在Linux下使用awk解析ini文件的方法

在Linux下使用awk解析ini文件的方法

作者: tommwq | 来源:发表于2018-11-23 13:32 被阅读0次

    在Linux下使用awk解析ini文件的方法

    ini文件

    ini文件是一些软件用来保存配置信息的文本文件。ini文件的优点是简单和灵活,缺点是没有统一的标准。

    下面来看一个ini文件内容示例

    [Master]
    Arguments = -log master.log
    LogLevel = 3
    [Client]
    Arguments = -log client.log
    LogLevel = 1
    

    从这里可以看到,ini文件的内容可以根据[Master]、[Client]分为不同的部分,每个部分包含了一组键值对。我们可以对ini文件进行简单的建模:

    1. ini文件是一个文本文件。
    2. 一个ini文件由一组域组成。
    3. 域由域名字和一系列键值对组成。各个域之间以域名字分隔。域名字的格式为 [名字] 。
    4. 在同一个域中,每个键值对占用独立的一行,格式为“键=值”。

    基于这个模型就可以对ini文件进行解析。

    awk程序

    下面的程序遍历ini文件的每一行,将读取到的键值对以“export scope_name=value”的格式输出。

    # ini2env.awk
    function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
    function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
    function trim(s) { return rtrim(ltrim(s)); }
    
    BEGIN{scope="";} {                              
            if ($1 ~ /\[.*\]/)                                                   
                    scope=trim(substr($1,2,length($1)-2));                             
            else {                                                   
                    name=trim($1)
                    value=$2;  
                    if (length(value) > 0) { 
                            printf("export %s_%s=\"%s\"\n", scope, name, value); 
                    } 
            } 
    }
    

    使用示例

    # app.ini
    [app]
    arguments= --debug
    
    tmpfile=`mktemp'
    cat app.ini | awk -F '=' -f ini2env.awk >> $tmpfile
    source $tmpfile
    rm $tmpfile
    
    app=a.out
    $app $app_arguments
    

    相关文章

      网友评论

          本文标题:在Linux下使用awk解析ini文件的方法

          本文链接:https://www.haomeiwen.com/subject/lyljqqtx.html