##概要
本投稿では、正規表現とgrepの活用方法を説明します。
正規表現を使用した検索置換をマスターすると、
テキストファイルの整形時は勿論のこと、ドキュメントの編集など業務のあらゆる場面で楽が出来ます。
また、ファイルサーバ内などのファイルを高速に検索するために、ファイル一覧化バッチで一覧化し、サクラエディタでgrepしましょう。
サーバを逐一読みに行かなくて済むため、頻繁にファイルを探す用事がある人はかなり楽になると思います。
※「正規表現」とは、ある特徴を満たす文字列の事を、決まった法則で表す手法の事です。テキストファイルから文字列を検索する際の、検索条件に使われることが多いです。
※「grep」とは、複数のファイルからキーワードに該当する部分を一括で抽出してくれるプログラムの事です。
サクラエディタの使用を前提としています。
定常的な運用作業に便利なバッチも作成しましたので、良ければこちらもご活用ください。
諸般の事情によりサクラエディタを使用できないという方は、FINDSTRコマンドでgrepしてみてください。
##環境
Windows 10, Windows 7
サクラエディタ v2.2.0以上
##準備
- サクラエディタをインストールします。
- 正規表現ライブラリ bregonig.dllをサクラエディタと同じフォルダに配置します。
- ファイル一覧化バッチでファイルサーバ内のファイルの一覧を作成しておきます。
- Grepが直ぐにできるよう、ショートカットファイルを作成しておきます。
リンク先例:"C:\Program Files (x86)\sakura\sakura.exe" -GREPMODE -GREPDLG -GFOLDER=Z:\filelist -GOPT=RP1
##Grepのやり方
利用可能な正規表現についてはこちらを参照してください。
今回はデモデータとして、WordPressのファイル一式とPythonのソースファイル一式をZドライブ直下に配置して使用しました。
####Grep対象ファイルの絞り込み
Grep対象ファイルのサイズが大きかったりファイル数が多いと所要時間が掛かるため、目的のものが含まれるファイルが見当付く場合は初めに絞り込みます。
ワイルドカード '*' が使用可能です。'!'を先頭に付けると、それ以外という意味になります。一つの文字列内にワイルドカードを複数使用可能です。
項目 | 設定値 | 説明 |
---|---|---|
ファイル | *WP* | WordPressフォルダの各ファイルのパスが記述されたファイルが対象 |
####拡張子の絞り込み
拡張子はファイル名の末尾にあるため、正規表現の末尾を示す '$' を使用します。
項目 | 設定値 | 説明 |
---|---|---|
条件 | .png$ | 拡張子が "png" のものに限定 |
####特定の文字列を除外
正規表現で否定のパターンを示す "?!" とOR(論理和)を示す '|' を使用します。
項目 | 設定値 | 説明 |
---|---|---|
条件 | ^(?!.*(.php|.css|.png)).*$ | PHP, CSS, PNGを除外 |
####期間の絞り込み
ファイルの更新日時で絞り込みたい場合は、文字の範囲または括弧内の何れか一文字を示す "[]" を使用します。
項目 | 設定値 | 説明 |
---|---|---|
ファイル | *Attr* | 各ファイルのサイズおよび更新日時が記述されたファイルが対象 |
条件 | ^(?!.*(200[0-9]|201[1-8])/[01][0-9]).*$ | 2000年~2018年のファイルを除外 |
####複数の文字列を含むものに絞り込み
複数の文字列で検索したい場合は、任意の一文字を示す '.' と直前の文字の繰り返しを示す '+' を使用します。
また、それら文字列がともにファイル名に含まれるとは限らず、フォルダ名とファイル名に分かれているかも知れません。そのため、ファイルパスの一覧をGrep対象ファイルに指定します。
項目 | 設定値 | 説明 |
---|---|---|
条件 | lib.+test | "lib", "test" を含むものに限定 |
ファイル | *Path*Py* | Pythonフォルダ内の各ファイルのパスが記述されたファイルが対象 |
####Grep結果をさらに絞り込み
一度のGrepで目的のファイルを直ぐに見つける事は至難の業です。
Grepのヒット数が多すぎて見つけられない場合は、置換機能で絞り込みます。
[Ctrl]+[R]キーを押下で、置換ダイアログが開きます。
項目 | 設定値 | 説明 |
---|---|---|
条件 | ^(?!.*(main)).*$ | "main" を含むもの以外 |
置換対象 | 行削除 | 条件に合致したものを削除 |
####Grepのやり直し
Grepしても目的のものが見つからなかった場合は、条件を変えて最初からGrepをやり直します。
[Ctrl]+[G]キーを押下で、Grepダイアログが開きます。
テキストボックス内で[↑]/[↓]上下キーを押下するか、テキストボックス右端の [∨]印をクリックすると、履歴が表示されます(直近30件)。
####ファイル一覧の該当行を開く
結果出力形式で「ノーマル」を選択してGrepし、そのGrep結果をダブルクリックすると、
該当行の位置にカーソルが移動した状態でGrepしたファイルが開かれます。
項目 | 設定値 | 説明 |
---|---|---|
結果出力形式 | ノーマル | 条件に合致した行を含むファイルおよび当該行の内容を表示 |
####検索に合致したファイルを開く
Grep対象ファイルにファイルパスの一覧を指定し、結果出力形式で「結果のみ」を選択してGrepし、
そのGrep結果をダブルクリックすると、条件に合致したファイル自体がサクラエディタで開かれます。
項目 | 設定値 | 説明 |
---|---|---|
ファイル | *Path* | 各ファイルのパスが記述されたファイルが対象 |
結果出力形式 | 結果のみ | 条件に合致した行の内容のみを表示 |