1切蟋、安裝
- wget http://beyondgrep.com/ack-2.12-single-file
- sudo mv ack-2.12-single-file /usr/bin/ack
- sudo chmod 0755 /usr/bin/ack
2淑掌、ack的使用案例
1.在當(dāng)前目錄遞歸搜索單詞”eat”,不匹配類(lèi)似于”feature”或”eating”的字符串:
$ ack -w eat
2.搜索有特殊字符的字符串’
',’.')需要在字面上被匹配:
$ ack -Q '$path=.' /etc
3.除了dowloads目錄,在所有目錄搜索”about”單詞:
$ ack about --ignore-dir=downloads
4.只搜索包含’protected’單詞的PHP文件达椰,然后通過(guò)文件名把搜索結(jié)果整合在一起,打印每個(gè)文件對(duì)應(yīng)的搜索結(jié)果:
$ ack --php --group protected
5.獲取包含’CFLAG’關(guān)鍵字的Makefile的文件名项乒。文件名為*.mk,makefile,Makefile,GNUmakefile的都在考慮范圍內(nèi):
$ ack --make -l CFLAG
6.顯示整個(gè)日志文件時(shí)高亮匹配到的字符串:
$ tail -f /var/log/syslog | ack --passthru 192.168.1.10
7.要換取ack支持的文件過(guò)濾類(lèi)型啰劲,運(yùn)行:
$ ack --help-type
3. ack 其他參數(shù)詳解
ack可以用來(lái)替代grep 99%的的使用場(chǎng)景
它很智能,只搜索它“認(rèn)識(shí)”的文件
比如:ab.c這中文件檀何,ack是不會(huì)去搜索的
使用-a選項(xiàng)可以搜索所有的文件蝇裤,但
某些文件是永遠(yuǎn)都不會(huì)搜索的(除非在命令行中指定)廷支,比如備份文件。
[no]ignore-dir: ack會(huì)在制定目錄下遞歸搜索文件夾栓辜,如果要忽略搜索某個(gè)文件件恋拍,使用--ignore-dir. 如果不忽略,使用--noignore-dir.
-a, --all: 搜索所有文件
-C:打印匹配文本前后的N行文字啃憎。-A(after)芝囤,打印匹配文本后面的N行,-B(befor)辛萍,打印匹配文本前面的N行悯姊。
-c, --count: 覆蓋正常輸出,打印每個(gè)文件匹配文本的次數(shù)贩毕,沒(méi)有匹配的文件輸出0悯许,可使用-l輸出匹配的文件。
--column: 輸出匹配的列辉阶,很少用到先壕。
-f: 僅列出來(lái)會(huì)搜索哪些文件,不做真實(shí)的搜索
-G REGEXP:僅搜索匹配給定正則的文件
-g REGEXP: -f -G REGEXP的縮寫(xiě)
-i: ignore case
--[no]ignore-dir=xxx: 忽略搜索某個(gè)文件
--line=xxx: 只打印匹配文件的某些行谆甜,比如 ack Note . --line=3,4,5,6垃僚,或者--line=3-6
-l: 只輸出有匹配的文件
-L: 只輸出沒(méi)有匹配的文件
-n: 不進(jìn)行文件夾的遞歸搜索
--type=TYPE /--type=noTYPE: 指定搜索要包括/排除的文件類(lèi)型,可以使用--TYPE/noTYPE指定规辱。比如搜索java文件: --java, 不搜索python文件: --nopython
--type-add TYPE=.EXTENSION[,.EXT2...]: EXTENSION和EXT2為擴(kuò)展名的文件作為type的類(lèi)型的文件谆棺。比如: --type-add python=.ptl,將ptl作為python文件罕袋。下次搜索使用--python時(shí)則會(huì)搜索.ptl文件
--type-set TYPE=ext[, ext2....]: 同上改淑,但會(huì)覆蓋原來(lái)的文件類(lèi)型定義
-1: 只要搜索到第一次匹配就停止搜索
--help=types: 列出文件類(lèi)型對(duì)應(yīng)的擴(kuò)展名
可以使用.ackrc作為ack的配置文件,定義匹配文字的顏色浴讯,新定義文件類(lèi)型和匹配的擴(kuò)展名等朵夏,這樣就不用每次都在命令行中指定了。
- --type-set=python=.py,.ptl