Aqui está uma possível solução com nossos amigos grep e sed . Isso é bom para arquivos pequenos, caso contrário, uma solução perl (ou awk ?) Terá muito mais desempenho.
Esta é a sintaxe bash :
i=1
maxnum=$(grep -o '\<word\>' datafile | wc -l)
while (( i <= maxnum )); do
sed -i "s/word/$i/" datafile
(( i++ ))
done
grep -o conta o número total de palavra em datafile . Isso é de Glenn .
O único truque aqui é que sed não está funcionando globalmente, substituindo apenas a primeira string correspondente. É por isso que esse código é tão lento, pois invoca sed maxnum vezes em todo o arquivo de dados.
Esteja ciente de que sed -i altera seu arquivo de dados original, portanto, faça uma cópia primeiro.