有一个文本文件。如下:
<?xml version="1.0" encoding="UTF-8" ?>
<result>
<lrc id="189296" artist="陶晶莹" title="太委屈"></lrc>
<lrc id="1243" artist="xxx" title="vvv"></lrc>
</result>
如何查出中间两行,并给值到一个数组里 id[],artist[]和title[]里?
最后要列出来。并在以后使用这些变量。
本人实在很菜啊。目前只摸索出 cat a.xml | grep '</lrc>'
-_-! ...........差很远啊
请教高手一个shell查找xml匹配数据的问题。
-
- 帖子: 49
- 注册时间: 2008-12-08 18:12
- ranfow
- 帖子: 176
- 注册时间: 2006-07-10 16:38
- 联系:
Re: 请教高手一个shell查找xml匹配数据的问题。
代码: 全选
#!/bin/bash
declare -a ids
declare -a artists
declare -a titles
tmp=`sed -n -e 's/<lrc //' -e 's/><\/lrc>//p' $1 | sed -e 's/id="//' -e 's/artist="//' -e 's/title="//' -e 's/"//g'`
lrc=($(echo $tmp))
for((i=0, j=0; i<${#lrc[*]}; i++, j++))
do
#echo "${lrc[i]}--${lrc[++i]}--${lrc[++i]}"
ids[j]=${lrc[i]}
artists[j]=${lrc[++i]}
titles[j]=${lrc[++i]}
done
for((k=0; k<${#ids[*]}; k++))
do
echo "id: ${ids[k]}--artist: ${artists[k]}--title: ${titles[k]}"
done
代码: 全选
<?xml version="1.0" encoding="UTF-8" ?>
<result>
<lrc id="189296" artist="陶晶莹" title="太委屈"></lrc>
<lrc id="1243" artist="xxx" title="vvv"></lrc>
</result>
然后在终端执行
结果如下:./xmlparser.sh test.xml
ranfow@ranfow-laptop:~/codes/sh$ ./xmlparser.sh test.xml
id: 189296--artist: 陶晶莹--title: 太委屈
id: 1243--artist: xxx--title: vvv
- 附件
-
- xml.tar.bz2
- 相关文件
- (570 Bytes) 已下载 58 次
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 请教高手一个shell查找xml匹配数据的问题。
代码: 全选
cat a.xml | grep '</lrc>'|sed "s/<lrc //;s/><\/lrc>//;s/id=/id[NUM]=/;s/artist=/artist[NUM]=/;s/title=/title[NUM]=/;s/\"\ /\";/g"|while read line;do
echo "${line//NUM/${i:-0}}"
((i++))
done >/tmp/source
. /tmp/source
rm /tmp/source
for((j=0; j<${#id[@]}; j++));do
echo -e "id[$j]: ${id[j]}\nartist[$j]: ${artist[j]}\ntitle[$j]: ${title[j]}"
done

- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 请教高手一个shell查找xml匹配数据的问题。
其实数据没有怪物的话还可以简化的:
代码: 全选
cat a.xml | grep '</lrc>'|sed "s/<lrc //;s/><\/lrc>//;s/=/[NUM]=/g;s/\"\ /\";/g"|while read line;do
echo "${line//NUM/${i:-0}}"
((i++))
done >/tmp/source
. /tmp/source
rm /tmp/source
for((j=0; j<${#id[@]}; j++));do
echo -e "id[$j]: ${id[j]}\nartist[$j]: ${artist[j]}\ntitle[$j]: ${title[j]}"
done
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 49
- 注册时间: 2008-12-08 18:12
Re: 请教高手一个shell查找xml匹配数据的问题。
谢谢啦。学到了。 
