检查哪个INI文件部分具有特定的密钥

时间:2018-07-19 09:42:30

标签: bash

我有一个ini文件,只能有两个状态。状态一:

[General]
StartWithLastProfile=0

[Profile0]
Name=default
IsRelative=1
Path=Profiles/kn081mln.default
Default=1

[Profile1]
Name=Dark
IsRelative=1
Path=Profiles/elqlrk57.Dark

状态二:

[General]
StartWithLastProfile=0

[Profile0]
Name=default
IsRelative=1
Path=Profiles/kn081mln.default

[Profile1]
Name=Dark
IsRelative=1
Path=Profiles/elqlrk57.Dark
Default=1

两者之间的区别在于Profile0Profile1段是否具有键Default=1。如何检查Default=1这两节中的哪一部分正在使用bash?

2 个答案:

答案 0 :(得分:3)

您可以使用

awk '/\[Profile[01]\]/ {label=$0} /Default/ {print label}'

说明:

如果一行与类别标签匹配,请记住当前类别。

我在这里使用的类别模式是\[Profile[01]\]。由于[]在不进行转义时被视为集合,因此必须对文字[]进行转义,并将[01]用作字符集。

如果出现所需键,请输出标签。

答案 1 :(得分:1)

经过一番修补,发现可以使用bash脚本中的一些Python来完成此操作:

#!/bin/bash
foo=$(python - << EOF
import configparser
config = configparser.ConfigParser()
config.read('/path/to/file.ini')

if config.has_option('Profile0', 'Default'):
    print('Default is Profile0')
else:
    print('Default is Profile1')
EOF)

echo $foo