3
1回のパスで複数の文字列を置き換える
テンプレートファイルのプレースホルダー文字列を、一般的なUnixツール(bash、sed、awk、perlなど)で具体的な値に置き換える方法を探しています。交換が1回のパスで行われることが重要です。つまり、すでにスキャン/交換されたものを別の交換と見なしてはなりません。たとえば、次の2つの試みは失敗します。 echo "AB" | awk '{gsub("A","B");gsub("B","A");print}' >> AA echo "AB" | sed 's/A/B/g;s/B/A/g' >> AA この場合の正しい結果はもちろんBAです。 一般に、ソリューションは、入力を左から右にスキャンして、指定された置換文字列の1つとの最長一致を検索し、各一致について置換を実行して、入力のそのポイントから続行することと同等でなければなりません(すでに読み込まれた入力も、実行された置換も一致と見なされます)。実際、詳細は関係ありません。置換の結果が全体または一部が別の置換の対象になることはありません。 注私は正しい一般的なソリューションのみを探しています。特定の入力(入力ファイル、検索および置換ペア)で失敗するソリューションを提案しないでください。