对于系统管理员或者编程人员来说,grep可能是最流行的用在复杂的配置文件目录或者大的源码树里面,搜索指定文件字符串的工具。
如果grep是你最喜欢的工具,那么你也可能喜欢甚至更喜欢ack。Ack是基于perl的命令行工具,非常类似于grep,但是设计的目的是为了改善grep的搜索速度和搜索能力。 由其是如果你是一个程序员,我强烈推荐你使用ack替换grep。Ack的用法已经优化了很多,所以像你一样的程序员可以使用更复杂的索引但是只需要很少敲键盘次数。
ACK的特性
为了提出一些ack的强大特性。
默认搜索当前的工作目录
默认递归搜索子目录
忽视元数据目录,例如,.svn,.git, CSV目录。说
忽视二进制文件(pdf,image,coredumps)和备份文件(foo~,*.swp)
打印搜索结果的行号码,这样有助于我们查找
可以按照指定的文件类型查找(perl,C++,makefile)
高亮搜出出来的结果
支持perl的高级正则表达式,相比于grep使用的GUN的正则表达式,更具有表现力
对于搜索速度而言,ack比grep更快。Ack的速度来自于它的内置文件类型过滤,ack尾部维护了一系列的识别的文件类型,同时跳过了未知的或不必要的文件类型。它也避免了检查多余的元数据目录。
安装ack
方便的是,ack从官网下载下来之后,可以作为一个单一的perl脚本使用,这个脚本因为包含了所有依赖的perl模块在内部,因此你不需要安装任何额外的perl模块来运行这个脚本。
可以直接在官网下载最新版本的ack,安装在你的Linux系统上面。目前最新版本是2.14
curl http://beyondgrep.com/ack-2.14-single-file > /usr/bin/ack&& chmod 0755 !#:3
注意,如果是在Debian系统上面,也有一个独立的包叫做ack(Kanjicode converter).如果你刚好正在使用哪个包,你最好重新命名ack防止名字冲突。
ack用法例子
1、从当前目录递归搜索”eat”这个单词。像”feature”或“eating”是不会匹配的。
awk –w eat
2、搜索带有特殊字符的字符串:”$path=.” 。所以得元字符($或者 . )都需要被逐字的匹配。
ack –Q ‘$path=.’ /etc
这里-Q选项告诉ack不转义元字符,元字符仍然当做普通字符来看待。
3、在所有目录中搜索’about’ ,但是不搜索download目录下面的内容
ack about –ignore-dir=downloads
4、仅仅搜索包含”protected”的php文件。然后通过文件名分组搜索的结果,然后打印每一个搜索组的文件名
ack --php –group protected
5、得到一系列Makefile的包含 “CFLAG”的文件名。文件名为 *.mk ,makefile ,Makefile ,GNUmakefile的文件都会被考虑进去。
ack –-make -l CFLAG
#-l 为一旦匹配的指定的内容就停止匹配 #--make 为识别的make文件
6、高亮匹配的字符串,当仍然显示这逐渐增加的日志文件的时候
tail –f /var/log/syslog | ack –passthru192.168.1.10 # 这里日志仍然完全输出,但是被匹配的内容会高亮显示
#--passthru 不管有没有匹配,仍然打印所有的行
如果想要查看一些列ack可以识别的文件过滤类型,运行下面的命令
ack –help-type
原文地址:http://xmodulo.com/search-text-files-patterns-efficiently.html
总之,ack非常类似于grep,在用法上也有很多的相似性。这有一篇grep用法可以参考http://amyhehe.blog.51cto.com/9406021/1689598
共同学习,写下你的评论
评论加载中...
作者其他优质文章