Como você solicitou especificamente sed
, aqui está um script sed
/ bash
que deve fazer o que você deseja, desde que cada elemento <Name>
seja aberto e fechado na mesma linha:
(IFS='';
n=0;
while read line; do
if echo "${line}" | grep -Pq "<Name>\w+</Name>"; then
((n++));
echo "${line}" | sed "s/<Name>\(\w\+\)<\/Name>/<Name${n}><\/Name${n}>/";
else
echo "${line}";
fi;
done) < names.xml
Eu testei com este arquivo de entrada:
<!-- names.xml -->
<Names>
<Name>Luigi</Name>
<Name>Mario</Name>
<Name>Peach</Name>
</Names>
E produziu a seguinte saída:
<Names>
<Name1>Luigi</Name1>
<Name2>Mario</Name2>
<Name3>Peach</Name3>
</Names>
Dito isso, isso parece ser um bom candidato para um idioma com uma biblioteca de análise de XML. Aqui está um script Python que faz o que você quer:
#!/usr/bin/env python2
# -*- encoding: ascii -*-
# add_suffix.py
import sys
import xml.etree.ElementTree
# Load the data
tree = xml.etree.ElementTree.parse(sys.argv[1])
root = tree.getroot()
# Update the XML tree
suffix = 0
for name in root.iter("Name"):
suffix += 1
name.tag += str(suffix)
# Write out the updated data
tree.write(sys.argv[2])
Execute assim:
python add_suffix.py names.xml new_names.xml