Ich suche nach einer Möglichkeit, Platzhalterzeichenfolgen in einer Vorlagendatei durch konkrete Werte durch gängige Unix-Tools (bash, sed, awk, möglicherweise perl) zu ersetzen. Es ist wichtig, dass der Austausch in einem einzigen Durchgang erfolgt, dh was bereits gescannt / ersetzt wurde, darf bei einem anderen Austausch nicht berücksichtigt werden. Diese beiden Versuche schlagen beispielsweise fehl:
echo "AB" | awk '{gsub("A","B");gsub("B","A");print}'
>> AA
echo "AB" | sed 's/A/B/g;s/B/A/g'
>> AA
Das richtige Ergebnis ist in diesem Fall natürlich BA.
Im Allgemeinen sollte die Lösung dem Scannen der Eingabe von links nach rechts entsprechen, um eine längste Übereinstimmung mit einer der angegebenen Ersatzzeichenfolgen zu erzielen, und für jede Übereinstimmung eine Ersetzung durchzuführen und von diesem Punkt an in der Eingabe fortzufahren (keine der Bereits gelesene Eingaben oder die durchgeführten Ersetzungen sollten für Übereinstimmungen berücksichtigt werden. Tatsächlich spielen die Details keine Rolle, nur dass die Ergebnisse des Austauschs weder ganz noch teilweise für einen anderen Ersatz berücksichtigt werden.
HINWEIS Ich suche nur nach korrekten generischen Lösungen. Bitte schlagen Sie keine Lösungen vor, die für bestimmte Eingaben (Eingabedateien, Suchen und Ersetzen von Paaren) fehlschlagen, auch wenn dies unwahrscheinlich erscheint.
tr AB BA
.