Y's note

Web技術・プロダクトマネジメント・そして経営について

本ブログの更新を停止しており、今後は下記Noteに記載していきます。
https://note.com/yutakikuchi/

ackコマンド

目次

  1. 概要
  2. 設定
    1. port install
    2. コマンドを作る
    3. cpan install
    4. 設定ファイル
  3. コマンドの実例
    1. 通常検索
    2. 検索対象から外す
    3. 全部検索
    4. Pager指定
    5. ファイルタイプ指定
    6. 大小文字区別なし
    7. ファイル検索
    8. ファイルパス名の正規表現指定
    9. ファイルパス+ファイル名の正規表現指定
    10. 完全一致検索
    11. 指定単語の前後行出力
    12. 一致したファイル名を出力
    13. 再起的に検索しない
    14. group指定を外す
    15. 検索対象から特定ディレクトリを外す
    16. 猫キャラ表示
    17. デフォルト指定?

概要

  • ackコマンド
    • ソースコード検索はgrepが有名だが、より強力なツールと言われるackを試してみる。
    • grepより処理が早い。(設定ファイルなど無視)
    • grepより文法が短くて済む。
    • grepと文法が似ている。
    • grepの機能がほとんど使えて、findの要素も持つ。
    • Perlで書かれていてwindowsでも動く。
    • Perl正規表現が使える。

設定

macで試してみる。以下3つのうちどちらかの手順で設定が行える。

1. port install

1行コマンドを実行するだけ。

sudo port install p5-app-ack
2.コマンド作る

自分のローカルフォルダに設置。PATHの設定も必要。

mkdir -p ~/local/bin/
fetch http://betterthangrep.com/ack-standalone > ~/local/bin/ack
chmod +x ~/local/bin/ack
3.cpan install

cpan利用者は楽。

# cpan
cpan> install App::Ack
cpan> exit
設定ファイル

~/.ackrcファイルを設定する。自動でオプションが反映される。

--ignore-dir=bak
--sort-files
--pager=less
--nogroup
--type-add=php=.inc
--type-set=tags=tags

コマンドの実例

オプションは以下のリンクを参照。http://search.cpan.org/dist/ack/ack-base オプションの日本語ドキュメントがほとんど無い(涙)

通常検索

basicな使い方。簡単ですね。testという単語を含むファイルと行数を表示。

ack test
検索対象から外す

grepと同じでvを指定。

ack -v test
全部検索

拡張子無しファイルも検索可能とする。

ack -a test
Pager指定

検索結果をlessで開く。

ack test --pager="less"
ファイルタイプ指定

検索対象となるファイルタイプを指定する。以下はhtmlファイルが対象。

ack --html test

指定可能なファイルタイプはack --help-typeで閲覧可能。

大小文字区別なし

grepと同じく-iで指定。

ack -i test
ファイル検索

指定したファイル一覧を表示。

ack -f --html
ファイルパス名の正規表現指定

ファイルパス名の検索に正規表現指定が可能。

ack -w test -G /Filter/
ファイルパス+ファイル名の正規表現指定

ファイル指定かつファイルパス名の検索に正規表現指定が可能。-f -Gと一緒。

ack -w test -g /Filter/
完全一致検索

指定した単語の完全一致を検索。

ack -w test
指定単語の前後行出力

testという単語に一致する前後5行までを出力。

ack -C 5 test

grepと同じくB(前行),A(後行)のみも表示可能

ack -B 5 test
ack -A 5 test
一致したファイル名を出力

これはgrepと同じ。-lで指定可能。

ack -l test

一致していないファイルを表示。-Lで指定可能。

ack -L test
再起的に検索しない

オプション-rが再起的検索指定(おそらくデフォルトで指定)。-nが再起的検索しない。

ack -n test
group指定を外す

結果表示方法の切り替え。ackはデフォルトgroup指定がされており、これにより各ファイルに対しての検索結果がまとめられてしまう。それをgrepのようにgroupを外す事が可能。

ack --nogroup test

通常のack結果

test.html
2:test

test.php
2:echo "test";

test.pl
2:test

nogroup指定結果

test.html:2:test
test.php:2:echo "test";
test.pl:2:test
検索対象から特定ディレクトリを外す

検索対象から特定ディレクトリを外す指定。bakディレクトリを無視する。

ack --ignore-case bak
猫キャラ表示

全然意味ないコマンドなんで無視。

ack --thpppt

結果

_   /|
\'o.O'
=(___)=
   U    ack --thpppt!
デフォルト指定?

以下のオプションはどうやらデフォルトで指定されている様子。

--color : 結果のハイライト
-r : 再起的検索