Text_1
とText1
の複数のインスタンスを含むファイルがあり、これらの両方の文字列をそれぞれText_A
とTextB
に置き換える必要があります。
現在、私は各ファイルに対して2つの検索および置換関数を実行しています。1つはText_1
を検出してText_A
に置き換え、もう1つはText1
を検出してTextB
に置き換えます。 。
「検索と置換」を2回実行する代わりに、これを一度に行う方法はありますか?
私はDreamweaver CS3を使用していますが、Notepad ++、通常のNotepad、OO Writer、MS Wordの方が簡単だと思います。DreamweaverまたはNotepad ++でこれを実行できれば理想的ですが、他の何かをダウンロードして、仕事を終わらせます。コマンドラインなどを実行したり、バッチファイルを作成したりする必要はありません(私はそれを認識していますが、本当に理解していません)。
上記の説明が明確でない場合は、このように説明しましょう...
検索と置換を実行したい1回1ドキュメントで実行したい[〜#〜] all [〜#〜]その1つの検索と置換インスタンス中の次の例:
Text_1
およびReplaceをText_A
でText1
およびReplaceをTextB
で私はnot複数のドキュメントで検索と置換を実行しようとしています。
Sed を見てください。たった1つのコマンドラインで簡単に目標を達成できます
sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt
Notepad ++ 6.0以降では、次の手法を使用して、スクリプトなしで実際に可能です。
検索:Text_1と置換:Text_A
検索:Text2および置換:TextB
検索:(Text_1)|(Text2)
置き換え:(?1Text_A)(?2TextB)
一般的な構文は次のとおりです:
Find: (FindA)|(FindB)|(FindC)...
Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...
?1は、最初にキャプチャされたフレーズを指します。
私はこれを次の答えから得ました: https://stackoverflow.com/a/16104946/287101
Notepad ++を使用すると、次のいずれかを実行できます
置換したい単語を含むすべてのファイルを開き、開いているすべてのファイルで検索/置換を使用します
ファイル内で検索/置換を使用する
検索と置換のオプションを実行するマクロを記録して再生します
2つの異なる置換が行われるため、[検索と置換]を2回実行した方がよいでしょう。ただし、処理時間のトレードオフはほとんどありません。以下を検討してください。
検索と置換を1回実行し、用語ごとに検索:
Get Term
Does term match? If so, replace term
Get Next Term
...
実行のために、これは線形であると仮定し、これがO(n)時間で実行されると言います。
2つの異なる用語を見つけたいとします。検索と置換を2回実行すると、次のようになります。
Get Term
Does term match? If so, replace term
Get Next Term
...
Get Term
Does term match? If so, replace term
Get Next Term
...
O(2x1n)時間、または1つの用語を検索する場合の2倍の時間がかかります。
2つの置換で2つの用語を検索すると、理論的には次のようになります。
Get Term
Does first term match? If so, replace first term
Does second term match? If so, replace second term
Get Next Term
...
用語を取得するのにそれほどの処理能力は必要ないため、本質的には、各用語について2セットの検索を検索し、O(1x2n)の時間を与え、1回実行して2つの用語を検索します。
各用語を2回ロードしないことで時間を節約できますが、各用語を2回検索するのにより多くの時間を費やすため、トレードオフはほとんどありません。この機能は、1つの用語を1つの置換で検索するよりも使用頻度が少ないため、アプリケーション開発者は単に記述しないと想定します。その機能。
プログラマへの免責事項:これは一般的な例です。私はそれがより良いことを知っていますが、その機能が見つからない理由を示しようとしています。
バッチ検索と置換にTextCrawlerを使用しています。 (Textcrawlerより高速なので、複数のファイルにわたる単一の検索/置換にNotepad ++を使用します。)TextCrawlerは、正規表現と通常の検索/検索をサポートしています。バッチファイルは保存して、将来使用するために再ロードできます。
また、ActiveXプラグイン(Notepad ++用)を使用してカスタムスクリプトを実行することでも実行できます。
NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")
Notepad ++での正規表現のサポートは厳しく制限されています。代替演算子がないと、やりたいことに近づく可能性すらありません。 sed
、またはより優れた正規表現サポートを持つエディターを使用する必要があります。
一般的に使用されるGNU正規表現構文の拡張には以下が含まれます:
- ?演算子、つまりゼロまたは一種の意味。
- |代替演算子( "foo | bar"は "foo"または "bar"のいずれかに一致)
- 貪欲な/ gや大文字と小文字を区別しない/ iなどの修飾子。
- {a、b}は、ある種類のaとbの間のトークンを示します。
- (パターン)+は、同じパターンの1つ以上の一致をマッハします
Notepad ++をサポートするScitillaコンポーネントは、厳密にPOSIX互換であり、これらの拡張機能を認識しません。完全な概要といくつかの例については、正規表現を参照してください