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

发布于 2024-09-19 02:28:51 字数 187 浏览 10 评论 0原文

我想从 ini 文件的部分名称创建一个 var,例如:

[foo]
; ...

[bar]
; ...

[baz:bar]
;...

现在我需要一个像这样的 var

SECTIONS="foo bar baz"

提前致谢

I want to create a var from the section names of an ini file like:

[foo]
; ...

[bar]
; ...

[baz:bar]
;...

now I need a var like

SECTIONS="foo bar baz"

thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

暖心男生 2024-09-26 02:28:51

一行解决方案可能是:

export SECTIONS=`grep "^\[" test.ini |sort -u | xargs | tr '\[' ' ' | tr '\]' ' ' `

One line solution could be:

export SECTIONS=`grep "^\[" test.ini |sort -u | xargs | tr '\[' ' ' | tr '\]' ' ' `
我的奇迹 2024-09-26 02:28:51
SECTIONS=$(crudini --get your.ini | sed 's/:.*//')
SECTIONS=$(crudini --get your.ini | sed 's/:.*//')
城歌 2024-09-26 02:28:51

我现在正在使用这个构造,不需要知道一个部分是否存在。只需读取它,如果它是空的,则它不存在。

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

I'm now using this construct, don't need to know if a section exists. just read it, if it's empty it does not exist.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文