我正在使用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命令中做错了什么?
答案 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)
跳过tabs
和spaces
,只会从行中删除<DataBaseName>
和</DataBaseName>
。所有其他角色仍然存在请查看此tutorial了解更多信息。
例如,如果您将文件修改为:
<DataBaseName>fry</DataBaseName>something
此命令:
sed -n 's|[ \t]*<DataBaseName>\(.*\)</DataBaseName>|\1|p' sed_file
将输出:
frysomething
只是因为你的正则表达式与something
不匹配。