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.在当前目录递归搜索单词”eat”,不匹配类似于”feature”或”eating”的字符串:
$ ack -w eat
2.搜索有特殊字符的字符串’
',’.')需要在字面上被匹配:
$ ack -Q '$path=.' /etc
3.除了dowloads目录,在所有目录搜索”about”单词:
$ ack about --ignore-dir=downloads
4.只搜索包含’protected’单词的PHP文件,然后通过文件名把搜索结果整合在一起,打印每个文件对应的搜索结果:
$ ack --php --group protected
5.获取包含’CFLAG’关键字的Makefile的文件名。文件名为*.mk,makefile,Makefile,GNUmakefile的都在考虑范围内:
$ ack --make -l CFLAG
6.显示整个日志文件时高亮匹配到的字符串:
$ tail -f /var/log/syslog | ack --passthru 192.168.1.10
7.要换取ack支持的文件过滤类型,运行:
$ ack --help-type
3. ack 其他参数详解
ack可以用来替代grep 99%的的使用场景
它很智能,只搜索它“认识”的文件
比如:ab.c这中文件,ack是不会去搜索的
使用-a选项可以搜索所有的文件,但
某些文件是永远都不会搜索的(除非在命令行中指定),比如备份文件。
[no]ignore-dir: ack会在制定目录下递归搜索文件夹,如果要忽略搜索某个文件件,使用--ignore-dir. 如果不忽略,使用--noignore-dir.
-
-a, --all: 搜索所有文件
-
-C:打印匹配文本前后的N行文字。-A(after),打印匹配文本后面的N行,-B(befor),打印匹配文本前面的N行。
-
-c, --count: 覆盖正常输出,打印每个文件匹配文本的次数,没有匹配的文件输出0,可使用-l输出匹配的文件。
-
--column: 输出匹配的列,很少用到。
-
-f: 仅列出来会搜索哪些文件,不做真实的搜索
-
-G REGEXP:仅搜索匹配给定正则的文件
-
-g REGEXP: -f -G REGEXP的缩写
-
-i: ignore case
-
--[no]ignore-dir=xxx: 忽略搜索某个文件
-
--line=xxx: 只打印匹配文件的某些行,比如 ack Note . --line=3,4,5,6,或者--line=3-6
-
-l: 只输出有匹配的文件
-
-L: 只输出没有匹配的文件
-
-n: 不进行文件夹的递归搜索
-
--type=TYPE /--type=noTYPE: 指定搜索要包括/排除的文件类型,可以使用--TYPE/noTYPE指定。比如搜索java文件: --java, 不搜索python文件: --nopython
-
--type-add TYPE=.EXTENSION[,.EXT2...]: EXTENSION和EXT2为扩展名的文件作为type的类型的文件。比如: --type-add python=.ptl,将ptl作为python文件。下次搜索使用--python时则会搜索.ptl文件
-
--type-set TYPE=ext[, ext2....]: 同上,但会覆盖原来的文件类型定义
-
-1: 只要搜索到第一次匹配就停止搜索
-
--help=types: 列出文件类型对应的扩展名
可以使用.ackrc作为ack的配置文件,定义匹配文字的颜色,新定义文件类型和匹配的扩展名等,这样就不用每次都在命令行中指定了。
- --type-set=python=.py,.ptl
网友评论