لن تميز خوارزمية الرمز المميز
سؤال
صباح كل شيء ، أنا أكتب نص 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 داخل حلقة تستخدم IFS نفسها (أي عملية 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
لا تنتمي إلى StackOverflow