字符串标记化算法不会标记化

时间:2010-10-07 11:12:48

标签: xml bash token ifs

早上好, 我正在编写一个bash脚本来从给定目录中的所有文件中提取某些XML标记的值。我决定通过标记每一行并返回th4e relavent令牌来做到这一点。问题是它没有正确标记,我无法弄清楚原因。这是我可以重建问题的最小例子

#!/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(即cat操作)的循环中摆弄IFS有关,但这在以前从未出现过问题。
有什么想法吗?

谢谢, 瑞克

1 个答案:

答案 0 :(得分:1)

使用更好的工具来解析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