argius note

プログラミング関連

findやgrepで検索したファイルをGUIテキストエディタで開く

一般的なGUIテキストエディタには、GREP検索機能が付いていて、検索結果から対象ファイルにジャンプすることができる(タグジャンプ)。しかし、このGREP機能で指定できる検索条件では、指定できる条件に不満がある。
そこで、findまたはfind+grepなどで検索した結果からファイルを開くスクリプトを書いてみた。
まず、任意のテキストエディタを開くコマンド("text"という名前にしておく)を用意する。以下のように実行できるようにする。

text file [line-number]

次に、find+grepの結果と上のコマンドに渡すスクリプトを書く("jump"という名前にしておく)。これはちょっと複雑な処理なので、Perlで書いた。上限を3としているが、これは検索結果のうち"text"に渡すものを最大3件に限定するため("head -n 3"と同じ効果)。

use strict;

my $limit = 3;
for (<>) {
    s/[\r\n]//g;
    my $path;
    my $number;
    if (/^((?:[A-Za-z]:)?[^:]+):(\d+):.+$/) {
	$path = $1;
	$number = $2;
    } else {
	$path = $_;
	$number = 1;
    }
    next if !-f $path;
    system "text", $path, $number;
    last if --$limit <= 0;
}
exit;

これを、以下のように使う(shellスクリプト内でgrepを使っている箇所を検索)。

$ find . -name "*.sh" | xargs grep -n grep | jump