如何在Linux上提升文本的搜索效率

本文由 极客范 - minejo 翻译自 Xmodulo。欢迎加入极客翻译小组,同咱们一道翻译与分享。转载请参见文章末尾处的要求。

ack_ampliado

对于系统管理员或程序员来讲,当须要在复杂配置的目录中或者在大型源码树中搜寻特定的文本或模式时,grep类型的工具大概是最受欢迎的。php

若是grep是你最喜欢的工具之一,那么你可能会更喜欢ack。ack是一个基于Perl的相似于grep的命令行工具,可是搜索速度更快,能力比grep更强。尤为是当你是程序员时,我强烈推荐你使用ack来取代grep。html

ack的用法很是适用与代码搜索,所以程序员能够在源码树中进行复杂的查询,而只须要更少的按键。git

ack的特性

ack的一些很是强大的特性:程序员

  • 默认搜索当前工做目录
  • 默认递归搜索子目录
  • 忽略元数据目录,好比.svn,.git,CSV等目录
  • 忽略二进制文件(好比pdf,image,coredumps)和备份文件(好比foo~,*.swp)
  • 在搜索结果中打印行号,有助于找到目标代码
  • 能搜索特定文件类型(好比Perl,C++,Makefile),该文件类型能够有多种文件后缀
  • 高亮搜索结果
  • 支持Perl的高级正则表达式,比grep所使用GNU正则表达式更有表现力。

相比于搜索速度,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网站

$ 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
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”的字符串:

$ ack -w eat
1
2
$ ack - w eat
 

2.搜索有特殊字符的字符串’$path=.’,全部的元字符(好比’$',’.')须要在字面上被匹配:

$ ack -Q '$path=.' /etc
1
2
$ ack - Q '$path=.' / etc
 

3.除了dowloads目录,在全部目录搜索”about”单词:

$ ack about --ignore-dir=downloads
1
2
$ ack about -- ignore - dir = downloads
 

4.只搜索包含’protected’单词的PHP文件,而后经过文件名把搜索结果整合在一块儿,打印每一个文件对应的搜索结果:

$ ack --php --group protected
1
2
$ ack -- php -- group protected
 

ack_1

5.获取包含’CFLAG’关键字的Makefile的文件名。文件名为*.mk,makefile,Makefile,GNUmakefile的都在考虑范围内:

$ ack --make -l CFLAG
1
2
$ ack -- make - l CFLAG
 

6.显示整个日志文件时高亮匹配到的字符串:

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

7.要换取ack支持的文件过滤类型,运行:

$ ack --help-type
1
2
$ ack -- help - type
 

ack_2



原文连接: Xmodulo 翻译: 极客范 - minejo

译文连接: http://www.geekfan.net/6881/

[ 转载请保留原文出处、译者和译文连接。]
相关文章
相关标签/搜索