首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xmlstarlet从XML读取文件名并将它们合并到bash中

使用xmlstarlet从XML读取文件名并将它们合并到bash中
EN

Stack Overflow用户
提问于 2011-05-23 08:51:51
回答 1查看 958关注 0票数 0

我需要使用带有.sh脚本的xmlstarlet从xml配置文件中读取一些文件名,并将这些文件的内容(以相同的顺序)合并到一个文件中。

下面是我的xml结构:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <level1>
      ...
    </level1>

    <level2>
        <david>
            <txtfile>file1.txt</txtfile>
            <txtfile>file2.txt</txtfile>
            <txtfile>somefile.txt</txtfile>

            <incfile>config.inc</incfile>
            <incfile>foo.inc</incfile>
       </david>
       <jack>
           <txtfile>filex.txt</txtfile>
           <txtfile>filey.txt</txtfile>

           <incfile>otherconfig.inc</incfile>
           <incfile>foo1.inc</incfile>
       </jack>
    </level2>
</config>

在使用xmlstarlet读取这些文件名(可能是添加到bash中的数组)之后,我必须使用如下命令将文件内容合并到一个文件中

代码语言:javascript
复制
cat file1.txt,file2.txt,filex.txt > jack.txt

但我不确定。我没有很好的.sh脚本编写技能,但总而言之,我需要生成一些合并的文件,其中包括上述文件名的内容,如下所示:

代码语言:javascript
复制
/level2/david.txt (includes file1.txt, file2.txt, somefile.txt )
/level2/david.inc (includes config.inc, foo.inc)
/level2/jack.txt  (includes filex.txt, filey.txt)
/level2/jack.inc  (includes otherconfig.inc, foo1.inc)

我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-23 10:15:54

代码语言:javascript
复制
xmlstarlet el /tmp/x.xml | sort -u | while read f; do E=""; case "$f" in */txtfile) E=".txt";; */incfile) E=".inc";; *) continue; esac; ONE=`dirname $f`; TWO=`dirname $ONE`; ONE=`basename $ONE`; TWO=`basename $TWO`; filename="/$TWO/$ONE$E"; echo "cat `xmlstarlet sel -t -c \"$f\" /tmp/x.xml |  sed -e 's|</[^>]*><[^>]*>| |g' -e 's|<[^>]*>||g'` >> $filename"; done
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6091842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档