我会者优先dacracot的建议去结束
您可以使用xmlstarlet。然后,你甚至不必提取元素自己:
$ echo $tag|xmlstarlet sel -t --value-of '//img/@src'
http://imgs.xkcd.com/comics/barrel_cropped_(1).jpg
你甚至可以变成一个功能
$ get_attribute() {
echo $1 | xmlstarlet sel -t -o """ -v $2 -o """
}
$ src=get_attribute $tag '//img/@src'
这个,如果你不想多次重新分析文档,你也可以这样做:
$ get_values() {
eval file=\${$#}
eval $#=
cmd="xmlstarlet sel "
for arg in [email protected]
do
if [ -n $arg ]
then
var=${arg%%\=*}
expr=${arg#*=}
cmd+=" -t -o \"$var="\" -v $expr -o \""\" -n"
fi
done
eval $cmd $file
}
$ eval $(get_values src='//img/@src' title='//img/@title' your_file.xml)
$ echo $src
http://imgs.xkcd.com/comics/barrel_cropped_(1).jpg
$ echo $title
Don't we all.
我敢肯定有一个更好的方法来删除shell函数的最后一个参数,但我不知道它。
使用SED是一个非常,非常糟糕的做法 - 这是脆,不知道任何关于XML标准,当遇到像& amp;这样的东西时,会给你带来不好的结果。见Torsten Marek的建议。 – 2008-10-10 02:34:48
对不起,我没有为你制定sed脚本,我没有时间吧 – dacracot 2008-10-10 04:19:00