對於系統管理員或程序員來講,當須要在複雜配置的目錄中或者在大型源碼樹中搜尋特定的文本或模式時,grep類型的工具大概是最受歡迎的。php
若是grep是你最喜歡的工具之一,那麼你可能會更喜歡ack。ack是一個基於Perl的相似於grep的命令行工具,可是搜索速度更快,能力比grep更強。尤爲是當你是程序員時,我強烈推薦你使用ack來取代grep。html
ack的用法很是適用與代碼搜索,所以程序員能夠在源碼樹中進行復雜的查詢,而只須要更少的按鍵。git
ack的特性ack的一些很是強大的特性:程序員
相比於搜索速度,ack整體上比grep更快。ack的速度只要表如今它的內置的文件類型過濾器。在搜索過程當中,ack維持着承認的文件類型的列表,同時跳過未知或沒必要要的文件類型。它一樣避免檢查多餘的元數據目錄。正則表達式
在Linux上安裝ack儘管在大多數Linux發行版中是ack是標準包,可輕易得到(好比在基於debian的系統中,是ack-grep包,而在基於Redhat的系統中則是ack包),可是與發行版捆綁的ack版本仍然是1.x,而ack2.0已經發布,並且擁有更多特性。ide
所以我準備在官方網站下載,而後安裝ack。svn
方便的是,ack在官網可可做爲一個單獨的Perl腳本得到,其中整合了全部須要依賴的模塊。所以,你不須要額外安裝Perl模塊來運行這腳本。工具
爲了在你的Linux系統中安裝ack,去官網下載最新版本的ack。在寫本文時,最新的版本是2.12網站
1
2
3
4
|
$
wget
http
:
//beyondgrep.com/ack-2.12-single-file
$
sudo
mv
ack
-
2.12
-
single
-
file
/
usr
/
local
/
bin
/
ack
$
sudo
chmod
0755
/
usr
/
local
/
bin
/
ack
|
須要注意的是,在基於Debian的系統中,有一個獨立的包也叫ack(漢碼轉換器)。因此若是你碰巧有使用那個包,那麼你就必須重命名ack來避免命名衝突了。spa
ack的使用案例1.在當前目錄遞歸搜索單詞」eat」,不匹配相似於」feature」或」eating」的字符串:
1
2
|
$
ack
-
w
eat
|
2.搜索有特殊字符的字符串’$path=.’,全部的元字符(好比’$',’.')須要在字面上被匹配:
1
2
|
$
ack
-
Q
'$path=.'
/
etc
|
3.除了dowloads目錄,在全部目錄搜索」about」單詞:
1
2
|
$
ack
about
--
ignore
-
dir
=
downloads
|
4.只搜索包含’protected’單詞的PHP文件,而後經過文件名把搜索結果整合在一塊兒,打印每一個文件對應的搜索結果:
1
2
|
$
ack
--
php
--
group
protected
|
5.獲取包含’CFLAG’關鍵字的Makefile的文件名。文件名爲*.mk,makefile,Makefile,GNUmakefile的都在考慮範圍內:
1
2
|
$
ack
--
make
-
l
CFLAG
|
6.顯示整個日誌文件時高亮匹配到的字符串:
1
2
|
$
tail
-
f
/
var
/
log
/
syslog
|
ack
--
passthru
192.168.1.10
|
7.要換取ack支持的文件過濾類型,運行:
1
2
|
$
ack
--
help
-
type
|