単純なテキスト置換を使用して、あるシンボルを別のシンボルに名前変更したソースファイルがあるとします。そのファイルのdiff出力は、通常かなり長く、何が起こったかの非常に有用な識別子ではありません。あなたが知りたいのは、変更が単純にs/a/b/g
だった場合です。もしそうならば、a
とb
は、あなたがこのツールを事前に話しているわけではありません。 (引数として、 'a'と 'b'に改行が含まれていないと仮定できます)ファイルの検索と置換操作の特定
- 検索と置き換えにはどのようなアルゴリズムを使用しますか? (簡単)
- いくつかのテキストの置換が行われた場合、どのように動作させるのですか? (かなり簡単)
- 元のファイルを比較しないで、どのようにdiff出力で動作するように書きますか? (かなり難しい)
- 検索/置換ではなく正規表現マッチを特定するか?
- このような変更が他のファイルと一緒に含まれているファイルでは、sed式を生成し、diffを大幅に短縮するヒューリスティックを思いつくことができますか? (ハード)
これは、アルゴリズムの設計のように、私が使用したい実際のツールに基づいているため、疑問があります。そうすれば、素晴らしいコマンドラインツール上記のボーナスポイントのいずれかを行います。 ;)私は今考える
正規表現について言えば、元の文字列の一部が置換文字列で再利用された可能性はありますか?これは、正規表現による単純な検索よりもはるかに難しくなると思いますが、定数演算に置き換えられます(おそらく、リストに2つの異なる項目を書くことができます)。 –
ちょっと考えました。 's/programmer/developer 'の後に' s/program/executable'を続けると 'programmer'に違った影響を与えます。操作は単語全体(プログラミング言語のトークン)にのみ影響すると考えてよいでしょうか? –
私は、あなたの状態が制限されている限り、単純なケースでもこれを解決することができてうれしいです。私は、一般的なケースで正規表現のマッチを見つけることは可能ではないと思います。検索置換のペアが重複していれば、合理的なアルゴリズムは実際に使用されたものとは異なる検索/置換のセットを思いつくでしょう。しかし、現時点での解決策の欠如を考えると、部分的な回答でさえも、何の答えよりも優れているわけではないので、あなたの前提を明記し、そこから出てください。 – ijw