早晨,我正在编写一个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

我猜该问题是与我在循环中使用IF的IF有关(即CAT操作)的提议,但这从来都不是问题。
有任何想法吗?

谢谢,里克

有帮助吗?

解决方案

使用更好的工具来解析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 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top