文字列トークン化アルゴリズムはトークン化しません
質問
朝、すべて、特定のディレクトリ内のすべてのファイルから特定のXMLタグの値を抽出するBASHスクリプトを作成しています。私は各ラインをトークン化し、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(つまり猫の操作)を使用するループ内のIFSをいじることに関係していると思いますが、これはこれまでに問題になりませんでした。
何か案は?
ありがとう、リク
解決
より良いツールを使用して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
所属していません StackOverflow