早上好,我正在编写一个bash脚本,从给定目录中的所有文件中提取特定XML标记的值。我决定通过标记每一行并返回th4e相关标记来完成此操作。问题是它没有正确地标记化,我不能完全弄清楚原因。这是我能用来重建这个问题的最小例子
#!/bin/bash
for file in `ls $MY_DIRECTORY`
do
for line in `cat $MY_DIRECTORY/$file`
do
LOCALIFS=$IFS
IFS=<>\"
TOKENS=( $line )
IFS=$LOCALIFS
echo "Token 0: ${TOKENS[0]}"
echo "Token 1: ${TOKENS[1]}"
echo "Token 2: ${TOKENS[2]}"
echo "Token 3: ${TOKENS[3]}"
done
done我猜这个问题与我在一个使用IFS的循环中处理IFS有关(即cat操作),但这以前从未出现过问题。
有什么想法吗?
谢谢,里克
发布于 2010-10-07 20:01:54
使用更好的工具来解析xml,理想情况下它应该是一个解析器,但是如果您的需求很简单,并且知道xml的结构,那么简单的字符串操作可能就足够了。例如,xml文件,您想要获取tag3的值
$ cat file
blah
<tag1>value1 </tag1>
<tag2>value2 </tag2>
<tag3>value3
</tag3>
blah
$ awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' file
value3所以要遍历你的目录
for file in *.xml
do
value="$(awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' "$file" )"
echo "$value"
done https://stackoverflow.com/questions/3881052
复制相似问题