0%

ack / ag - enhance grep for programmer

相信大家都有用過grep來找文字,不過這個ack是專為程式設計師開發的。
從官網下載並安裝

1
2
3
$ curl http://beyondgrep.com/ack-2.12-single-file > ack
$ sudo mv ack /usr/local/bin
$ sudo chmod 755 /usr/local/bin/ack

ack有以下這些特性

  • 預設就搜尋當前目錄
  • 預設搜尋所有子目錄
  • 忽略Metadata資料節,如.svn.git
  • 忽略Binary檔
  • 印出找到Pattern的行號
  • 能夠搜尋特定文件類型的檔案 (如Perl/C++)
  • Highlight搜尋結果
  • 支持Perl的Advance Regular Expression

幾個常用的功能

如何只搜尋eat而忽略掉feature和`eating

1
$ ack -w eat 

當Pattern中有特殊字元的時候,需要當作Literal chracter被匹配

1
$ ack -Q '$path/$'

放棄搜尋某些目錄

1
$ ack about --ignore-dir=downloads 

列出某些特定文件類型的檔案,列出擁有Pattern的檔案名稱

以Makefile為例,可能的檔名有 *.mk, makefile, Makefile
我們想知道這些檔案裡面哪些定義了CFLAGS,就能夠這樣作

1
$ ack --make -l CFLAG 

Highlight某些特定Pattern

1
$ tail -f /var/log/syslog | ack --passthru 192.168.1.10 

這裡的passthru是不管有沒有匹配到都會輸出。

Update

在網路上釉看到ag這套軟體。用途大同小異。多了一些ack沒有的功能。
可以參考Conquering the Command Line Chapter 2. Ack/Ag