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

使用shell(sed/awk)从ini文件获取节列表,sed,awk,ini,Sed,Awk,Ini,我想从ini文件的节名创建一个变量,如: [foo] ; ... [bar] ; ... [baz:bar] ;... 现在我需要一个像 SECTIONS="foo bar baz" 提前感谢我现在正在使用此构造,不需要知道是否存在节。只要读一下,如果它是空的,它就不存在了 INI_FILE=test.ini function ini_get { eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \ -e 's/;

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

[foo]
; ...

[bar]
; ...

[baz:bar]
;...
现在我需要一个像

SECTIONS="foo bar baz"

提前感谢

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

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
INI\u文件=test.INI
函数ini\u get
{
eval`sed-e's/[:space:][]*\=[[:space:][]*/=/g'\
-e’s/;.*$/'\
-e's/[:空格:]*$/'\
-e's/^[:空格:]*/'\
-e“s/^\(.*\)=\([^\”]*\)$/\1=\“\2\”/“\
<$INI\u文件\
|sed-n-e“/^\[$1\]/,/^\s*\[/{/^[^;].\=.*/p;}”
echo${!2}
}
IP=$(ini\U获得50001 IP)
端口=$(ini\U获取50001端口)
echo$IP:$PORT

单线解决方案可以是:

export SECTIONS=`grep "^\[" test.ini |sort -u | xargs | tr '\[' ' ' | tr '\]' ' ' `
SECTIONS=$(crudini --get your.ini | sed 's/:.*//')