代码之家  ›  专栏  ›  技术社区  ›  Andreas Linden

使用shell(sed/awk)从ini文件获取节列表

  •  3
  • Andreas Linden  · 技术社区  · 14 年前

    我想从ini文件的节名创建一个var,如:

    [foo]
    ; ...
    
    [bar]
    ; ...
    
    [baz:bar]
    ;...
    

    现在我需要一个

    SECTIONS="foo bar baz"
    

    提前谢谢

    3 回复  |  直到 12 年前
        1
  •  2
  •   Soft2base    12 年前

    单线解决方案可以是:

    export SECTIONS=`grep "^\[" test.ini |sort -u | xargs | tr '\[' ' ' | tr '\]' ' ' `
    
        2
  •  1
  •   pixelbeat    10 年前
    SECTIONS=$(crudini --get your.ini | sed 's/:.*//')
    
        3
  •  -1
  •   Andreas Linden    4 年前

    我现在使用这个构造,不需要知道是否存在一个节。只要读一下,如果它是空的,它就不存在了。

    INI_FILE=test.ini
    
    function ini_get
    {
    
        eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
            -e 's/;.*$//' \
            -e 's/[[:space:]]*$//' \
            -e 's/^[[:space:]]*//' \
            -e "s/^\(.*\)=\([^\"']*\)$/\1=\"\2\"/" \
        < $INI_FILE \
        | sed -n -e "/^\[$1\]/,/^\s*\[/{/^[^;].*\=.*/p;}"
    
        echo ${!2}
    }
    
    
    IP=$(ini_get 50001 ip)
    PORT=$(ini_get 50001 port)
    echo $IP:$PORT