[英]Reading filenames from XML using xmlstarlet and merge them in bash
我需要使用带有.sh脚本的xmlstarlet从xml配置文件中读取一些文件名,并将这些文件的内容(按相同顺序)合并到一个文件中。
这是我的xml结构:
<?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>
在读取(也许以bash添加到数组中)之后,使用xmlstarlet这些文件名我必须使用诸如以下命令将文件内容合并为单个文件
cat file1.txt,file2.txt,filex.txt > jack.txt
但我不确定。 我没有.sh脚本技巧,但总而言之,我需要生成一些合并的文件,其中包括上述文件名的内容,如下所示:
/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)
我怎样才能做到这一点?
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.