美文网首页Linux 命令集合
linux下使用ack进行代码搜索

linux下使用ack进行代码搜索

作者: 祐吢房_2c9a | 来源:发表于2019-04-04 09:42 被阅读0次

1、安装

2、ack的使用案例

1.在当前目录递归搜索单词”eat”,不匹配类似于”feature”或”eating”的字符串:

$ ack -w eat

2.搜索有特殊字符的字符串’path=.’,所有的元字符(比如’',’.')需要在字面上被匹配:

$ 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

相关文章

网友评论

    本文标题:linux下使用ack进行代码搜索

    本文链接:https://www.haomeiwen.com/subject/isoxiqtx.html