我需要一个工具来解析配置文件并从中请求一些数据。
配置文件的格式是自由(可以是INI、XML等),但越人性化越好。
这是一个示例配置文件(使用 XML,但它可以是任何内容:我不介意格式):
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<name>Some name</name>
<description>Some description</description>
</configuration>
工具的用法应该是这样的:
[ereOn@server ~]$ the_tool config.xml "string(/configuration/name)"
Some name
[ereOn@server ~]$ the_tool config.xml "string(/configuration/description)"
Some description
你知道有什么 Linux 工具可以做到这一点吗?
您可以使用 python(.ini 样式配置文件)来做到这一点:http://docs.python.org/library/configparser.html
编辑: 您也可以将 sed 与正则表达式一起使用(但是如果您对 sed 没有一点经验,那么请忘记“轻松”:P)。
一种简单的配置格式样式(变量=值,每行一个)可以使用 grep 和 cut 轻松解析。
例如config.conf文件:
name=Some Name
description=Some Description
然后获取具体值:
# grep "^name=" config.conf | cut -d= -f2
Some Name
# grep "^description=" config.conf | cut -d= -f2
Some Description
它很简单而且非常便宜(不需要安装任何额外的二进制文件,因为 grep 和 cut 是任何 Linux 上的标准...)。
如果您想要一个命令来提供您需要的值,您也可以编写一个简单的 bash 脚本包装器:
#!/bin/bash
CONFIG_PATH=/path/to/config.conf
if [ ! -e $CONFIG_PATH ]; then
echo "$CONFIG_PATH not found"
exit 1
fi
if [ $# -ne 1 ]; then
echo "Syntax: $0 \"<variable name>\""
exit 1
else
VARNAME="$1"
eval "grep \"^$VARNAME=\" $CONFIG_PATH | cut -d= -f2"
fi
然后你需要做的就是这样称呼它:
# yourscript.sh variable_name
Perl 具有适用于许多不同格式的配置文件的模块,包括 JSON 和 INI
jc 与 jq 结合可以帮助您以几乎相同的方式解析许多不同的配置格式:
xml:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<name>Some name</name>
<description>Some description</description>
</configuration>
cat config.xml | jc --xml | jq -r '.configuration.name'
# Some name
yaml:
configuration:
name: Some name
description: Some description
cat config.yml | jc --yaml | jq -r '.[0].configuration.name'
# Some name
ini:
[configuration]:
name=Some name
description=Some description
cat config.ini | jc --ini | jq -r '.configuration.name'
# Some name
json:
{
"configuration":{
"name": "Some name",
"description":"Some description"
}
}
cat config.json | jq -r '.configuration.name'
# Some name