Ack: Grep的同类替代品

| Comments

ack是一個perl腳本,是grep的一個可選替換。

有以下優勢:

  • 為程序員設計,使用方便,輸入較少
    • 默認遞歸搜索
    • 缺省提供多種文件類型供選,文件類型對應的後綴名可修改
  • 使用perl的正則表達式,而grep只支持其一個子集
  • 搜索結果高亮輸出

很多人以訛傳訛,使人容易對ack的搜索速度產生誤解。ack的官方宣傳中說比grep快,其前提是ack可方便地針對部分後綴的文件進行搜索,而grep默認對所有文件搜索。ack的官方文檔中明確指出,在對大量文件進行搜索時,grep的速度還是最快的。

~/.ackrc

使用此配置文件存儲ack的常用選項。

-i –type-add php=.lib

如上所示,該文件中每一行應該是ack命令行參數中用空格分隔的一個部分。

例子

如果搜索的關鍵詞是正則表達式,在Linux下必須將其用雙引號包圍起來。

如:

1
ack "gbldb\s*="

Windows下的安裝

  • 安裝strawberryperl
  • 保存ack.plC:\bin
  • 創建批處理文件C:\bin\ack.bat:Liquid error: Traceback (most recent call last): File “/Users/donie/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/pygments.rb-0.3.7/lib/pygments/mentos.py”, line 303, in start res = self.get_data(method, lexer, args, kwargs, text) File “/Users/donie/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/pygments.rb-0.3.7/lib/pygments/mentos.py”, line 171, in get_data res = self.highlight_text(text, lexer, formatter_name, args, _convert_keys(opts)) File “/Users/donie/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/pygments.rb-0.3.7/lib/pygments/mentos.py”, line 122, in highlight_text lexer = self.return_lexer(lexer, args, kwargs, code) File “/Users/donie/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/pygments.rb-0.3.7/lib/pygments/mentos.py”, line 79, in return_lexer return lexers.get_lexer_by_name(lexer, **inputs) File “/Users/donie/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/pygments.rb-0.3.7/vendor/pygments-main/pygments/lexers/__init__.py”, line 80, in get_lexer_by_name raise ClassNotFound(‘no lexer for alias %r found’ % _alias) ClassNotFound: no lexer for alias ‘dos’ found
  • C:\bin加入環境變量%PATH%

資源

  • ack.vim: Vim使用ack的輔助擴展

Posted via UltraBlog.vim.

Comments