有什么工具可以在Linux上轻松解析配置文件吗?

问题描述 投票:0回答:4

我需要一个工具来解析配置文件并从中请求一些数据。

配置文件的格式是自由(可以是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 工具可以做到这一点吗?

linux parsing configuration-files redhat
4个回答
5
投票

您可以使用 python(.ini 样式配置文件)来做到这一点:http://docs.python.org/library/configparser.html

编辑: 您也可以将 sed 与正则表达式一起使用(但是如果您对 sed 没有一点经验,那么请忘记“轻松”:P)。


3
投票

一种简单的配置格式样式(变量=值,每行一个)可以使用 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



0
投票

jcjq 结合可以帮助您以几乎相同的方式解析许多不同的配置格式:

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
© www.soinside.com 2019 - 2024. All rights reserved.