当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请教高手一个shell查找xml匹配数据的问题。
帖子发表于 : 2008-12-18 11:36 

注册: 2008-12-08 18:12
帖子: 49
送出感谢: 0 次
接收感谢: 0 次
有一个文本文件。如下:
<?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>'
-_-! ...........差很远啊


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请教高手一个shell查找xml匹配数据的问题。
帖子发表于 : 2008-12-18 21:31 
头像

注册: 2006-07-10 16:38
帖子: 176
送出感谢: 0 次
接收感谢: 1
代码:
#!/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

将以上代码保存为xmlparser.sh
代码:
<?xml version="1.0" encoding="UTF-8" ?>
<result>
<lrc id="189296" artist="陶晶莹" title="太委屈"></lrc>
<lrc id="1243" artist="xxx" title="vvv"></lrc>
</result>

将以上代码保存为test.xml
然后在终端执行
引用:
./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]
被下载 33 次


_________________
http://blog.ranfow.cn/
页首
 用户资料  
 
3 楼 
 文章标题 : Re: 请教高手一个shell查找xml匹配数据的问题。
帖子发表于 : 2008-12-18 22:31 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
代码:
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


不过有临时文件不爽。。。。 :em03


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 请教高手一个shell查找xml匹配数据的问题。
帖子发表于 : 2008-12-18 22:48 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
其实数据没有怪物的话还可以简化的:
代码:
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


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 请教高手一个shell查找xml匹配数据的问题。
帖子发表于 : 2008-12-19 9:38 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
grep的每行,读入,tr 切"为回车。删除"行。剩下的3行就是一组数据。

如果pl,好多现成的解析器。


_________________
● 鸣学


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 请教高手一个shell查找xml匹配数据的问题。
帖子发表于 : 2008-12-20 13:19 

注册: 2008-12-08 18:12
帖子: 49
送出感谢: 0 次
接收感谢: 0 次
谢谢啦。学到了。 :em11


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译