Je cherche un moyen de remplacer les chaînes d'espace réservé dans un fichier de modèle par des valeurs concrètes, avec des outils Unix courants (bash, sed, awk, peut-être perl). Il est important que le remplacement soit effectué en un seul passage, c'est-à-dire que ce qui est déjà numérisé / remplacé ne doit pas être pris en compte pour un autre remplacement. Par exemple, ces deux tentatives échouent:
echo "AB" | awk '{gsub("A","B");gsub("B","A");print}'
>> AA
echo "AB" | sed 's/A/B/g;s/B/A/g'
>> AA
Le résultat correct dans ce cas est bien sûr BA.
En général, la solution doit être équivalente à balayer l'entrée de gauche à droite pour une correspondance la plus longue avec l'une des chaînes de remplacement données, et pour chaque correspondance, effectuer un remplacement et continuer à partir de ce point dans l'entrée (aucune des déjà lu, ni les remplacements effectués ne doivent être pris en compte pour les correspondances). En fait, les détails n'ont pas d'importance, juste que les résultats du remplacement ne sont jamais pris en compte pour un autre remplacement, en tout ou en partie.
REMARQUE Je recherche uniquement des solutions génériques correctes. Veuillez ne pas proposer de solutions qui échouent pour certaines entrées (fichiers d'entrée, recherche et remplacement de paires), aussi improbables qu'elles puissent paraître.
tr AB BA
.