Szukam sposobu na zastąpienie ciągów znaków zastępczych w pliku szablonu konkretnymi wartościami za pomocą popularnych narzędzi uniksowych (bash, sed, awk, może perl). Ważne jest, aby zastąpienie odbywało się w jednym przejściu, co oznacza, że to, co już zostało zeskanowane / wymienione, nie może być brane pod uwagę przy kolejnej wymianie. Na przykład te dwie próby kończą się niepowodzeniem:
echo "AB" | awk '{gsub("A","B");gsub("B","A");print}'
>> AA
echo "AB" | sed 's/A/B/g;s/B/A/g'
>> AA
Poprawnym wynikiem w tym przypadku jest oczywiście BA.
Ogólnie rzecz biorąc, rozwiązanie powinno być równoważne skanowaniu danych wejściowych od lewej do prawej w celu uzyskania najdłuższego dopasowania do jednego z podanych ciągów zastępczych oraz dla każdego dopasowania, wykonania zamiany i kontynuowania od tego momentu na wejściu (żaden z już odczytane dane wejściowe ani wykonane zamiany nie powinny być brane pod uwagę w przypadku dopasowań). W rzeczywistości szczegóły nie mają znaczenia, tylko to, że wyniki zamiany nigdy nie są brane pod uwagę przy kolejnej wymianie, w całości lub w części.
UWAGA Szukam tylko poprawnych ogólnych rozwiązań. Proszę nie proponować rozwiązań, które zawodzą w przypadku niektórych danych wejściowych (pliki wejściowe, wyszukiwanie i zamiana par), choć mogą się wydawać mało prawdopodobne.
tr AB BA
.