ack-grep 代码全文搜索
安装
ubuntu下要安装ack-grep,因为在debian系中,ack这个名字被其他的软件占用了。 sudo apt-get install ack-grep
特点
大家都说自己的东西好,因此ack官网列出了这工具的5大卖点:
- 速度非常快,因为它只搜索有意义的东西。
- 更友好的搜索,忽略那些不是你源码的东西。
- 为源代码搜索而设计,用更少的击键完成任务。
- 非常轻便,移植性好。
- 免费且开源
better than grep?
先来看下grep的日常用法。
- grep常用操作
-
- grep -r 'hello_world' # 简单用法
- grep '^hello_world' . # 简单正则
- ls -l | grep .py # 管道用法
一些参数:
-c(统记)/ -i(忽略大小)/ -h(不显示名称)/
-l(只显文件名)/ -n(加行号)/ -v(显示不匹配)
这些命令在linux上的适用频率是相当高的,尤其是你用vim做为IDE的话(当然这是说在不知道ack之前)。
ack功能划分
在记忆的时候大体上可以分为这几个部分:
- Searching代码搜索
- Search output搜索结果处理
- File presentation文件展示
- File finding文件查找
- File inclusion/exclusion文件过滤
下面对每一项给几个简单实用的例子。
Searching
简单的文本搜索,默认是递归的。
ack-grep hello
ack-grep -i hello
ack-grep -v hello
ack-grep -w hello
ack-grep -Q 'hello*'
Search File
对搜索结果进行处理,比如只显示一个文件的一个匹配项,或者xxx
ack-grep --line=1 # 输出所有文件第二行 ack-grep -l 'hello' # 包含的文件名 ack-grep -L 'print' # 非包含文件名
File presentation
输出的结果是以什么方式展示呢,这个部分有几个参数可以练习下
ack-grep hello --pager='less -R' # 以less形式展示
ack-grep hello --noheading # 不在头上显示文件
ack-grep hello --nocolor # 不对匹配字符着色
File finding
没错,它可以查找文件,以省去你要不断的结合find和grep的麻烦,虽然在linux的思想是一个工具做好一件事。
ack-grep -f hello.py # 查找全匹配文件
ack-grep -g hello.py$ # 查找正则匹配文件
ack-grep -g hello --sort-files #查找然后排序
File Inclusion/Exclusion
文件过滤,个人觉得这是一个很不错的功能。如果你曾经在搜索项目源码是不小心命中日志中的某个关键字的话,你会觉得这个有用。
ack-grep --python hello #查找所有python文件
ack-grep -G hello.py$ hello # 查找匹配正则的文件
ack配置
也是一个相当赞的功能,对grep了解不多,不知道grep有没有同样的东西。通过配置可以把你的个人习惯做为默认配置,比如我是Python程序员,那默认我要搜索的文件大多数必然是.py的文件。每次搜索时都要输入:--python那就太无聊了。
另外还可以自己指定类型,通过--type-set=conf=.conf,指定一个.conf的文件形式,ack默认提供常见源码的支持。你可以通过:ack-grep --help types查看它支持多少中类型的源码,绝对有你不知道的语言。
下面是一个简单的配置
# 设置排序
--sort-files
#设置文件过滤
--python
--html
--js
--conf
# 设置显示
--noheading
# 定义新的文件类型
--type-set=conf=.conf
# 智能识别大小写
--smart-case
# 设置以less形式展示,设定less参数
--pager=less -R -M --shift 5 -i
ack-grep 代码全文搜索的更多相关文章
- 如何使用ABAP Restful API进行代码的全文搜索
使用这个代码全文搜索的前提条件,是在事务码SFW5里激活业务功能:SRIS_SOURCE_SEARCH 只需要把这个url贴到浏览器里: https://:44355/sap/bc/adt/repos ...
- 命令行的全文搜索工具--ack
想必大家在命令行环境下工作时候,一定有想要查找当前目录下的源代码文件中的某些字符的需求,这时候如果使用传统方案,你可能需要输入一长串的命令,比如这样: 1. grep -R 'string' dir/ ...
- linux下使用ack进行代码搜索
1.安装 wget http://beyondgrep.com/ack-2.12-single-file sudo mv ack-2.12-single-file /usr/bin/ack sudo ...
- MySQL+Sphinx实现全文搜索
最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...
- coreseek实战(三):全文搜索在php中应用(使用api接口)
coreseek实战(三):全文搜索在php中应用(使用api接口) 这一篇文章开始学习在php页面中通过api接口,使用coreseek全文搜索. 第一步:综合一下前两篇文章,coreseek实战( ...
- MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持
背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.1 ...
- Apache Solr采用Java开发、基于Lucene的全文搜索服务器
http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Luc ...
- OSChina 的全文搜索设计说明 —— 索引过程
http://www.oschina.net/question/12_71591 言: OSChina 的搜索做得并不好,很久之前一直想在细节方面进行改造,一直也没什么好的思路.但作为整体的结构或许对 ...
- 全文搜索之 Elasticsearch
概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载 ...
随机推荐
- Java编程的逻辑 (16) - 继承的细节
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- Java反射1——扫描某个包下的所有类
1.从包package中获取所有的Class /** * 从包package中获取所有的Class * * @param pack * @return */ public static Set< ...
- smali 语言语法
Androidkiller 可以反编译Android的apk,生成一种.smali代码.(这理解好像不对) 网上找了一篇smali的语法手册,可以方便查找,文章名<Smali文件语法参考> ...
- 洛谷P4742 [Wind Festival]Running In The Sky [Tarjan缩点,DAGDP]
题目传送门 Running In The Sky 格式难调,题面就不放了. 分析: 一句话题意:给定一张带点权的有向图,求最长点权路径及该路径上的最大点权. 很明显的$DAGDP$,因此需要缩点,将该 ...
- Mysql索引整理总结
一.索引概述 1. 简介 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,可以通过 ...
- Android-Kotlin在Fragment获取View
Android-Kotlin在Fragment获取View Overview 在使用Fragment的时候,使用了ButterKnife 来获取View但是一直出错,后来就直接使用Kotlin的导入布 ...
- require和require.async的区别
本文用seajs来讲解两种模块加载方式require和require.async的区别,类似java里的import,php里的include. <!DOCTYPE html> <h ...
- 获取当前页面url中的参数 coffeescript+node.js+angular
获取当前url:@$window.alert @$location.url()获取参数(json格式)@$window.alert @$location.search().channel
- List,Set的区别
1.List,Set都是继承自Collection接口2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该 ...
- [POJ1144]Network
来源:Central Europe 1996 思路:Tarjan求割点. 一个点$x$为割点当且仅当: 1.$x$为根结点且有两棵不相交的子树. 2.$x$不为根结点且它的子树中没有可以返回到$x$的 ...