有一个文本文件。如下:
<?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>'
-_-! ...........差很远啊
solution 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
solution 2:
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
不过有临时文件不爽。。。。
solution 3:
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
分享到:
相关推荐
总结来说,Shell解析处理XML的方法虽不及Python或Ruby等脚本语言灵活,但对于简单的任务和快速原型开发,它们提供了便利且高效的选择。熟练掌握`xmllint`、`xpath`和`xml2`的用法,可以提高系统管理员和开发者在日常...
shell 通过正则、换行、替换等原生态命令 实现 万能解析 json xml sql语句和一切有规则的文本。 在shll里面设置数组来实现自定义提取所需字段 主要是正则的运用,比如:arr[$ar]=$(echo $L | sed 's/\(.*\)"'"$ar"'...
本话题将深入探讨如何利用SFTP进行定时下载以及解析XML文件的过程。 首先,我们要理解SFTP的基本操作。SFTP提供了对远程文件系统的访问,包括上传、下载、列出目录、重命名和删除文件等。为了实现定时下载,我们...
JavaScript是Web开发中不可或缺的一部分,尤其在前端领域,它提供了丰富的功能来处理各种任务,包括解析XML文件。XML(eXtensible Markup Language)是一种数据交换格式,常用于存储和传输结构化数据。在JavaScript...
在你的项目中,你可能已经结合了这些技术,实现了SFTP的文件传输和XML的解析与生成功能。这样的工具对于处理服务器上的文件,特别是当需要在不同系统间交换结构化数据时,非常实用。记得在使用过程中,要确保代码的...
这是一个使用TinyXML进行xml文件解析的测试项目,测试了对xml文件中指定内容的读取功能。该项目演示了TinyXML的引入与使用,适合于首次接触xml解析的初学者。(这是自己第一次接触xml解析,所以仅涉及几个基本函数的...
XML(Extensible Markup Language)是一种数据交换和存储的标准,它具有自描述性,结构清晰,易于解析。以下我们将详细解释这个Shell脚本的工作原理及其相关知识点。 首先,我们来看`create_xml.sh`脚本,它是生成...
`OPENXML`函数本身接收三个参数:`idoc`是`sp_xml_preparedocument`返回的句柄,`rowpattern`是XPath表达式,用于指定要提取的XML数据,`flags`则用于控制解析行为。`OPENXML`返回的结果集可以与SQL语句结合,执行...
支持excel2003,2007的解析读取,可指定sheet页读取,指定行开始读取,过滤空行,指定列读取,过滤空单元格,支持json文件的解析读取,支持word文件的解析读取,txt文件等等,需要API文档可私信本人
3. **解析XML**: 使用解析器的`parse()`方法,传入XML数据源(如文件路径或输入流)和之前创建的事件处理器。 4. **处理事件**: 当解析器遇到XML文档的各个部分时,会调用事件处理器相应的方法。在这些方法中,你...
这可能涉及到文本解析技术,例如正则表达式或者XML/JSON解析库。 7. **程序自动化**:shell.dat生成器的使用可以极大地简化复杂的自动化任务。例如,它可以用于批量处理文件、定时执行任务或者自定义程序的启动行为...
本项目深入解析了基于Java、Shell和Python语言的RocketMQ设计源码,总计包含1281个文件,其中包括1063个Java源文件、66个Markdown文档、32个XML配置文件、26个PNG图片文件、20个YAML配置文件、18个Shell脚本文件、11...
脚本将解析XML文件,提取关键信息,如目标IP地址、开放端口、服务标识等,并将这些信息整理成TSV格式。这样,你可以快速地查看哪些主机是活动的,它们正在运行哪些服务,以及这些服务可能存在的漏洞。 标签 "Shell...
XML(eXtensible Markup Language)是一种通用的数据交换格式,因其结构化、平台独立性以及易于解析的特性,常用于存储和传输数据。本教程将详细讲解如何将数据库的表转换为XML文件,以便于数据共享、备份或跨系统...
本文将深入探讨一个特别的实现——使用纯POSIX Shell脚本编写的CSV、JSON、XML解析器和生成器。这样的工具具有轻量级、跨平台和易部署的优势,对于那些在Unix环境中工作且不希望依赖复杂语言的开发者来说,非常实用...
此外,还可以通过BCP命令结合`xp_cmdshell`存储过程来实现将XML数据导出到文件的功能。这种方式不仅能够高效地处理大量数据,还能保证数据的准确无误。 #### 实现步骤 1. **配置环境**:为了能够使用`xp_cmdshell`...
除了Visual C++和Windows Shell本身的知识,本书还可能涵盖了其他相关技术,如ASP.NET、C#、Java、Perl和XML等。这些技术虽然不直接关联于Windows Shell编程,但在现代软件开发中扮演着重要的角色,尤其是当涉及到...
该项目为2016-2017年间开发的基于Java与Shell语言的Boot项目,总计包含61个文件,其中包括42个Java源文件、9个XML配置文件、4个属性文件、1个Git忽略文件、1个Markdown文件、1个文本文件、1个临时文件、1个批处理...