スポンサーリンク

サクラエディタ Grep検索を連続して実行するバッチファイル

スポンサーリンク

複数のファイルから特定の文字列が使用されている箇所を調べるのにGrep検索機能を使用されている方は多いと思います。私もプログラムの影響調査などで良くサクラエディタのGrep検索を行っています。サクラエディタのGrep検索はコマンドラインからも実行できるので、複数の検索キーワードを連続してGrep検索するバッチファイルを作成したので公開したいと思います。

準備

  1. サクラエディタのインストール
    こちら(https://sakura-editor.github.io/)のページよりインストーラをダウンロードしてインストールしてください。

バッチファイルの説明

今回作成したバッチファイルは3つのファイルから構成されています。

1.multiGrep.bat
メインとなるバッチファイルです。

@echo off
rem 遅延環境変数を設定
setlocal ENABLEDELAYEDEXPANSION

rem ====== 設定ファイル読み込み ======
for /f "tokens=1,2* delims==" %%i in (config.txt) do ( 
    set KEY=%%i
    if not "!KEY:~0,1!"=="#" (
        set %%i=%%j
    )
)

rem ====== 実行 ======
echo 開始 > %OUTFILE%

rem 検索キーワード読み込み
for /f %%i in (keyword.txt) do (
    echo キーワード:%%i >> %OUTFILE%
    rem ダブルクォーテーションのエスケープ
    set KEYWORD=%%i
    set KEYWORD=!KEYWORD:%BEFORE_STRING%=%AFTER_STRING%!
    %SAKURA% -GREPMODE -GFOLDER=%GFOLDER% -GOPT=%GOPT% -GFILE=%GFILE% -GCODE=%GCODE% -GKEY="!KEYWORD!" >> %OUTFILE%
)
echo 終了 >> %OUTFILE%

ポイントは21行目の置換処理です。ここでは、検索キーワードにダブルクォーテーション「”」が含まれている場合、サクラエディタの仕様に沿って、二重のダブルクォーテーション「””」に変換しています。

2.config.txt
このファイルは検索時の条件を指定する設定ファイルです。

-- 検索対象のフォルダを指定
GFOLDER="C:\wk"
-- 検索対象のファイル名パターンを指定 *.*は全ファイルを対象
GFILE="*.*"
-- 正規表現を使用する場合は「R」を追加する。※「U」は必ず付ける。
GOPT="SPUH"
-- 検索文字コード「99」は文字コード自動判別
GCODE="99"
-- 検索結果ファイル名
OUTFILE="result.txt"
-- サクラエディタコマンドラインオプション
-- 詳細はhttps://sakura-editor.github.io/help/HLP000109.html参照

-- サクラエディタのパス
SAKURA="C:\Program Files (x86)\sakura\sakura.exe"

-- 制御用文字
BEFORE_STRING=^"
AFTER_STRING=^"^"

各設定値はコメント行(–で始まる行)を見てください。

3.keyword.txt
このファイルに検索するキーワードを指定してください。複数行指定することが可能です。

スポンサーリンク

使い方

1.config.txtの編集
基本的には検索対象のフォルダを「GFOLDER」に指定します。
他の設定内容はコメント行を見てください。

2.keyword.txtの編集
検索するキーワードを指定してください。

3.multiGrep.batをダブルクリック
検索結果が保存されたファイル(result.txt)がmultiGrep.batを置いているフォルダに作成されます。
result.txtはただのテキストファイルですので、通常のサクラエディタのGrep検索結果と異なり、検索結果の行をダブルクリックしても対象のファイルが表示されることはありません。対象のファイルを開くには開きたい行を選択してタグジャンプ(F12キーを押す)して表示してください。

スポンサーリンク

ダウンロード

3つのファイルをZIPで圧縮したファイルはこちらからダウンロードできます。

コメント

  1. 冨田 より:

    便利ですね。活用させていただきます。

    • marock より:

      コメントありがとうございます!
      改善点などご意見いただけると嬉しいです。

  2. 匿名 より:

    とても便利です。ありがとうございます!!

    (課題)
    数十件のキーワードで、大きめのディレクトリを対象に実行すると、

    エディタ間の対話に失敗しました。
    権限レベルの異なるエディタが既に起動してる可能性があります。

    とのエラーが吐かれます(失敗した単語は中途半端なgrep結果となる)

    根本原因は調査中ですが、、
    情報連携致します

  3. ys より:

    素晴らしい内容ですね!
    活用させていただきます。
    Grep実行時にサクラエディタを一瞬たりとも表示させないようにしたいのですが
    何か良い方法はないものでしょうか?