使用sed从XML文件中提取值,并在开头获得空格。我怎么能避免这种情况?

时间:2013-08-05 06:29:33

标签: bash sed

我正在使用sed将XML文件中包含的值放入变量中。

该文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<DataBase>
        <DataBaseName>fry</DataBaseName>
</DataBase>

我这样做:

dbName=$(sed -n 's|<DataBaseName>\(.*\)</DataBaseName>|\1|p' path/to/DataBase.xml)

它正确抓取鱼苗,但它在开头有一个标签。我在sed命令中做错了什么?

2 个答案:

答案 0 :(得分:0)

尝试:

dbName=$(sed -n 's|\s*<DataBaseName>\(.*\)</DataBaseName>|\1|p' path/to/DataBase.xml)

(您还需要匹配可能的空格字符。

答案 1 :(得分:0)

您不匹配完整的行。

试试这个:

dbName=$(sed -n 's|[ \t]*<DataBaseName>\(.*\)</DataBaseName>|\1|p' path/to/DataBase.xml)

跳过tabsspaces,只会从行中删除<DataBaseName></DataBaseName>。所有其他角色仍然存在请查看此tutorial了解更多信息。

例如,如果您将文件修改为:

<DataBaseName>fry</DataBaseName>something

此命令:

sed -n 's|[ \t]*<DataBaseName>\(.*\)</DataBaseName>|\1|p' sed_file

将输出:

frysomething

只是因为你的正则表达式与something不匹配。