0

朝、私は特定のディレクトリ内のすべてのファイルから特定のXMLタグの値を抽出するbashスクリプトを作成しています。私は、各行をトークン化し、関連するトークンを返すことによってこれを行うことにしました。問題は、それが正しくトークン化されておらず、その理由を完全に理解できないことです。これが問題を再構築するために私が作ることができる最小の例です

#!/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をいじることに関係していると思いますが、これはこれまで問題になりませんでした。
何か案は?

ありがとう、リック

4

1 に答える 1

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 
于 2010-10-07T12:01:54.043 に答える