sed -n 's/\s*<species [^>]* id="\([^"]*\).*/\1/p' species.xml |\
cat -n |\
sed 's/\s*\([0-9]\+\)\s*/id\1 /' > ids.txt
cp species.xml my_species.xml
while read a b
do
sed -i 's/"'"$b"'"/"'$a'"/g' my_species.xml
done < ids.txt
على افتراض أن ملف XML الخاص بك قد تم تنسيقه بشكل جيد (أي ، كل علامة في كل سطر واحد) ، يمكنك الابتعاد عن SED و Bash. خلاف ذلك ، ستحتاج إلى لغة مع محلل XML. سوف ينجح نفس النهج ، لكن التفاصيل ستختلف.
قم بعمل خريطة للمعرفات للبدائل. ثم ، في كل مرة تواجه فيها معرف رأيته من قبل ، تبحث عنه واستبداله.
ال sed
الخط فوق خرائط كل معرف من أ <species>
علامة إلى معرف مرقوق (تسمح الانزلاق الخلفي بتقسيم الخط على عدة خطوط لقابلية القراءة).
يتم نسخ الملف لمنع تعديل الأصل.
عند قراءة كل سطر من ملف خريطة المعرف ، يتم استبدال جميع حوادث المعرف الأصلي بالمعرف الجديد والرقم.