我在shell脚本中使用xpath(在Mac OS X 10.9 usr/bin/xpath5.16
中提供)来解析XML文件中的某些值,这些值非常有效。但它给了我一些详细的输出,我不想在我的脚本中看到。我实际上只想将结果(属性的内容)存储在变量中。
content=$(xpath ../../AndroidManifest.xml /manifest/@android:versionCode)
echo "$content"
执行后,变量content
确实包含属性的内容,但是我还想要摆脱一些冗长的输出。这是:
Found 1 nodes:
-- NODE --
android:versionCode="38"
注意:输出末尾的“38”来自echo "$content"
行,其余的是xpath
的输出。
答案 0 :(得分:4)
找到解决方案。只需将2>/dev/null
附加到命令:
content=$(xpath ../../AndroidManifest.xml /manifest/@android:versionCode 2>/dev/null)
输出:
android:versionCode="38"
答案 1 :(得分:2)
来自man xpath
:
-q
Be quiet. Output only errors (and no separator) on stderr.
最好使用xpath -q ...
而不是管道所有stderr消息。这将确保将继续打印实际错误,但不会打印其他状态输出/节点分隔符。
答案 2 :(得分:0)
-q 对我不起作用。由于xpath utulity在std-err上打印额外的输出,只需将其重定向到/ dev / null
xpath file.xml '/foo/bar/text()' 2>/dev/null
答案 3 :(得分:0)
很抱歉,大家不满,但请看一下Open Directory关键字属性的此输出实例,它由文本字符串组成,每个文本字符串都是dscl plist输出中的一个节点:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>dsAttrTypeStandard:Keywords</key>
<array>
<string>nelve0jfO</string>
<string>qPknu6</string>
<string>cic3-bubcd</string>
</array>
</dict>
</plist>
/usr/bin/xpath "//string[.]/text()"
输出(控制台打印为4行):
找到3个节点: -节点-
nelve0jfO--节点-
qPknu6--节点-
cic3-bubcd
/usr/bin/xpath "//string[.]/text()" 2>/dev/null
输出:
nelve0jfOqPknu6cic3-bubcd
没有换行...
谁知道是否可以在查询语法中附加字段定界符?