gren - 次世代grepを目指したコマンドラインツール - バージョン 0.1.2 リリース!!

gren 0.1.2 をリリースしました。

  1. -cで色付き表示
  2. -f(検索するファイルを限定), --if(検索しないファイルを指定), --id(検索しないディレクトリを指定)オプションを何個でも設定出来るように
  3. 探索ディレクトリを第2引数で渡す形ではなく、-dオプションで渡すように(AND検索への布石)
  4. AND検索に対応(引数に検索ワードを複数個渡すことで、絞り込み検索出来ます)
  5. --depth, --this で探索する階層数を指定出来るように
  6. -sでサイレントモード、マッチした行のみを表示する

インストール

rubyがインストールされていれば、

Windows

gem.bat install gren

Mac OS X

sudo gem install gren

でインストール出来ます。

--help

最新のオプション一覧です。

% gren -h
gren [option] pattern
    -d, --directory DIR              Start directory. (deafult:".")
        --depth DEPTH                Limit search depth. 
        --this                       "--depth 0"
    -i, --ignore                     Ignore case.
    -s, --silent                     Silent. Display match line only.
        --debug                      Debug display.
    -c                               Color highlight.
    -f, --file-regexp REGEXP         Search file regexp. (Enable multiple call)
        --if, --ignore-file REGEXP   Ignore file pattern. (Enable multiple call)
        --id, --ignore-dir REGEXP    Ignore dir pattern. (Enable multiple call)

便利になった所とか

AND検索が出来るようになりました。google検索のように指定した複数のキーワード全てにマッチした行だけを表示するものです。直感的に絞り込み検索出来るようになります。こいつを実現するために第2引数で渡していたディレクトリ指定を、-dオプションに引っ越しました。

% gren split -f rb # splitを読んでいる部分を検索
gren/lib/gren/findgrep.rb:208:        line = line.split(m[0]).join(TermColor.parse("<42>#{m[0]}</42>"))
gren/pkg/gren-0.1.2/lib/gren/findgrep.rb:208:        line = line.split(m[0]).join(TermColor.parse("<42>#{m[0]}</42>"))
.
.
.
dir   : /Users/ongaeshi/Documents (4.44sec)
files : 280 in 15847 (3.29MB in 460.72MB)
match : 56 files, 123 hit                  # うわ、多いな...
% gren split -f rb gsub # gsubで絞りこみ
codes/TiddlyWiki/tools/cooker/splitter.rb:69:				toprecipe << "recipe: #{@@tagsubdirectory}/split.recipe\n"
codes/TiddlyWiki/tools/cooker/tiddler.rb:167:			lines = (lines.gsub("\r", "")).split("\n",-1)
.
.
# 
dir   : /Users/ongaeshi/Documents (0.99sec)
files : 280 in 15847 (3.29MB in 460.72MB)
match : 8 files, 17 hit                  # これくらいならOK!!

-cを付けるとマッチ部分が色付けされます。

--thisは指定した探索ディレクトリだけを検索対象とするオプションです。ホームディレクトリにある.emacsや.bashrcを検索する時などに便利です。
--depthを使うと何階層下まで戻るかを指定出来ます。(--this == --depath 0 です。)

% gren global-set-key -d ~ --this # ホームディレクトリだけ検索
/Users/ongaeshi/.emacs:103:;(global-set-key "\C-\M-p" 'scroll-previous-10-line)
/Users/ongaeshi/.emacs:104:(global-set-key "\M-p" 'scroll-previous-10-line)
/Users/ongaeshi/.emacs:112:;(global-set-key "\C-\M-n" 'scroll-next-10-line)
/Users/ongaeshi/.emacs:113:(global-set-key "\M-n" 'scroll-next-10-line)
.
.

dir   : /Users/ongaeshi (0.08sec)
files : 26 in 38 (142.09KB in 244.76KB)
match : 2 files, 74 hit
% 

-f(検索するファイルを限定), --if(検索しないファイルを指定), --id(検索しないディレクトリを指定)オプションを何個でも設定出来るようになりました。
絞り込み検索に便利です。

% gren FileTest 
lib/gren/findgrep.rb:91:        unless FileTest.readable?(fpath)
lib/gren/findgrep.rb:116:      FileTest.directory?(fpath) &&
.
.
pkg/gren-0.1.2/lib/gren/findgrep.rb:91:        unless FileTest.readable?(fpath)
pkg/gren-0.1.2/lib/gren/findgrep.rb:116:      FileTest.directory?(fpath) &&
.
.
README.rdoc:27:=== "FileTest" is retrieved below the present directory. 
README.rdoc:28: % gren FileTest
.
.

dir   : /Users/ongaeshi/Documents/gren (0.24sec)
files : 34 in 36 (40.14KB in 56.05KB)
match : 4 files, 66 hit

% gren FileTest --id pkg --if README.rdoc # 大分結果が絞り込めた!!
lib/gren/findgrep.rb:91:        unless FileTest.readable?(fpath)
lib/gren/findgrep.rb:116:      FileTest.directory?(fpath) &&
lib/gren/findgrep.rb:152:      @result.size += FileTest.size(fpath)
lib/gren/findgrep.rb:161:      @result.search_size += FileTest.size(fpath)

dir   : /Users/ongaeshi/Documents/gren (0.0sec)
files : 17 in 18 (13.69KB in 20.18KB)
match : 1 files, 4 hit

% gren FileTest --id pkg --if README.rdoc --id lib # libまで除外すると・・

dir   : /Users/ongaeshi/Documents/gren (0.0sec)
files : 13 in 14 (4.32KB in 10.81KB)
match : 0 files, 0 hit

今後のこと

基本的な機能はある程度入れることが出来ました、まだまだ便利にしていきたいと思います。
ご感想やご意見ありましたらコメント頂けると嬉しいです。