Я ищу способ заменить строки-заполнители в файле шаблона конкретными значениями с помощью общих инструментов Unix (bash, sed, awk, возможно, perl). Важно, чтобы замена выполнялась за один проход, то есть то, что уже отсканировано / заменено, не должно учитываться для другой замены. Например, эти две попытки терпят неудачу:
echo "AB" | awk '{gsub("A","B");gsub("B","A");print}'
>> AA
echo "AB" | sed 's/A/B/g;s/B/A/g'
>> AA
Правильный результат в этом случае, конечно, BA.
В общем случае решение должно быть эквивалентно сканированию ввода слева направо на предмет наибольшего совпадения с одной из заданных замещающих строк, а также для каждого совпадения, выполнения замены и продолжения с этого момента на входе (ни один из уже прочитанные вводные данные и выполненные замены должны учитываться для совпадений). На самом деле, детали не имеют значения, только то, что результаты замены никогда не рассматриваются для другой замены, полностью или частично.
ПРИМЕЧАНИЕ. Я ищу только правильные общие решения. Пожалуйста, не предлагайте решения, которые не подходят для определенных входных данных (входные файлы, поиск и замена пар), какими бы маловероятными они ни казались.
tr AB BA
.