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解析器的语言。同样的方法将起作用,但细节会有所不同。
制作ID地图以替换。然后,每次遇到以前看到的ID时,都会查找并替换它。
这 sed
线上的线从一个映射到一个 <species>
标记为编号ID(后斜线允许将行分开几行,以使其可读性)。
复制文件以防止修改原始内容。
由于从ID地图文件中读取每行,因此原始ID的所有出现都被新的编号ID替换。