Estoy buscando una forma de reemplazar las cadenas de marcador de posición en un archivo de plantilla con valores concretos, con herramientas comunes de Unix (bash, sed, awk, quizás perl). Es importante que el reemplazo se realice en una sola pasada, es decir, lo que ya está escaneado / reemplazado no debe considerarse para otro reemplazo. Por ejemplo, estos dos intentos fallan:
echo "AB" | awk '{gsub("A","B");gsub("B","A");print}'
>> AA
echo "AB" | sed 's/A/B/g;s/B/A/g'
>> AA
El resultado correcto en este caso es, por supuesto, BA.
En general, la solución debería ser equivalente a escanear la entrada de izquierda a derecha para una coincidencia más larga con una de las cadenas de reemplazo dadas, y para cada coincidencia, realizar un reemplazo y continuar desde ese punto en adelante en la entrada (ninguna de las la entrada ya leída ni los reemplazos realizados deben considerarse para las coincidencias). En realidad, los detalles no importan, solo que los resultados del reemplazo nunca se consideran para otro reemplazo, en su totalidad o en parte.
NOTA Solo estoy buscando soluciones genéricas correctas. No proponga soluciones que fallen para ciertas entradas (archivos de entrada, búsqueda y reemplazo de pares), por improbables que puedan parecer.
tr AB BA
.