1

我正在使用 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 命令中做错了什么?

4

2 回答 2

0

尝试:

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

(您也需要匹配可能的空白字符。

于 2013-08-05T06:37:43.607 回答
0

您没有匹配完整的行。

试试这个:

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

通过跳过tabsand spaces,只有<DataBaseName>and</DataBaseName>被从行中删除。所有其他字符仍然存在。查看本教程了解更多信息。

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

<DataBaseName>fry</DataBaseName>something

这个命令:

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

将输出:

frysomething

仅仅因为您的正则表达式不匹配something

于 2013-08-05T06:38:16.153 回答