一連のファイルを検索して置換するにはどうすればよいですか?


9

テキストを検索および置換できる一連のファイルを定義したいと思います。

明確にするために:

たとえば、特定のディレクトリにあるすべてのファイルxk * .tex(およびバックアップファイルを除く)を検索できるようにしたいと考えています。また、すべてのファイルdd * .shおよびee * .clsで、「不確実性」などの表現を「不確定性」に変更できるようにしたいと考えています。

これを行うための標準的な方法は何ですか?


@Claudio dired特定のディレクトリにあるファイルのサブセットを検索して置換する方法を確認することをお勧めします。
2015

ここではagwgrepとを使用して、ディレクトリ/プロジェクトの複数のファイルで「検索/置換」を行う例を示しますmultiple-cursors
Kaushal Modi、2015

回答:


4

明確に定義されたプロジェクトで作業している場合は、を介してそのプロジェクト内のoccurgrep機能を使用できますprojectile。githubの説明から、によって提供されるさまざまな機能の中でprojectile、次のことが可能です。

  • プロジェクトで置き換える
  • プロジェクトバッファで複数発生
  • プロジェクトのgrep
  • プロジェクトを訪問する

4

すべてのファイルが同じディレクトリにある場合は、次の手順を実行できます。私はこれをコメントで与えられた2番目の例に基づいています:

  1. M-xdireddiredモードで関連するディレクトリを開きます。
  2. %mdired-mark-files-regexpそのディレクトリで実行します。
  3. と入力します。^dd.*\.sh$これは、に相当する正規表現ですdd*.sh。これらのファイルはでマーク*され、配色によっては別の色で強調表示される場合もあります。
  4. ^ee.*\.cls$編集するすべてのファイルがマークされるまで、必要な正規表現(例:)を使用して、必要に応じて手順3を繰り返します。
  5. Qdired-do-query-replace-regexpマークしたファイルで実行します。
  6. クエリ文字列としてuncertaintyand indeterminacyを入力します。(これは大文字と小文字が区別されると思います。大文字と小文字を区別しないようにする必要がある場合は、正規表現が必要になることがありますが、わかりません。)

そしてそれがアイデアです。別のフォルダでこれを数回繰り返す必要がある場合は、手順2〜6をマクロとして記録できます(C-x (手順1のC-x )後で、手順6の後に押します)。そして、elispにあまり慣れていない場合でも、そのマクロを使用してelispに変換insert-kbd-macroし、有用な関数にハックしてみることができます。


1
Emacslandで、ことに注意してくださいS-qという意味ではありませんshift+q、それが意味しますsuper+qQもしそうなら、あなたはただ書くべきですshift+q。これを反映するようにコメントを編集しました。
ナニー

2
実際には、S-q意味はありませんshift+qsuper+q書かれるでしょうs-q
スーD.ニーム

3

を使用M-x find-name-diredして、特定の名前パターンに一致するすべてのファイルへのリンクを含む、diredバッファを取得できます。

指定M-x find-grep-diredされたgrepパターンと内容が一致するファイルを含むdiredバッファーを取得するために使用します。

そのようなコマンドはもっとたくさんあります。どちらが最適かは要件によって異なります。質問の更新を検討してください。

次に、マクロを使用してファイルのリストをトラバースできます。例としてブライアンの答えを見てくださいhttps : //emacs.stackexchange.com/a/9497/2005


1

rgrepおよびwgrepを使用します。

rgrepを使用すると、ファイル名が正規表現に一致し、ディレクトリ(およびそのサブディレクトリ)内のファイルで正規表現をすべて検索できます

wgrepを使用すると、rgrep検索の結果を含むバッファを編集できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.