Linux 命令行下搜索工具大盘点,效率提高不止一倍!
在 Linux 命令行下进行文本关键字的搜索,大家肯定第一时间会想到 grep 命令。grep 命令确实十分强大,但如果需要用到它更加灵活的功能时,可能命令就会显得十分复杂。
于是,为了简化 grep 的语句并达到同等效果,很多业内高手开发出了很多同样强大的工具,在某些程度上甚至可以替代 grep 。
下面我就给大家介绍 5 个常用的命令行搜索工具。如果你不喜欢使用编辑器或 IDE 来查找代码关键字,那么这几个工具将对你十分有帮助。
这 5 个工具有些仅适用于类 Unix 系统,但也有一些是跨平台的搜索速度非常快的工具。
grep
使用 grep 的优势是它几乎可以在任意类 Unix 系统上使用。这个命令的强大之处我相信大家都有所耳闻了。下面我给大家介绍几个我最常使用 grep 命令的几种方式。
如果你只想在 py 文件中找到一个关键字并且输出行号,可以这样操作:
$ grep -rins --include \*.py import .
假如我们前几天在命令行中输入了一个比较复杂命令,但是现在我们仅仅回忆起部分命令。那么我们可以通过管道(|)使用 grep 命令来搜索历史记录命令:
$ history | grep "python"
这条命令执行之后,我们就可以找到我们曾经所运行过的所有包含 python 关键字的命令,然后我们就可以通过 ! 来重新执行这条命令。
$ history | grep “python”
284 python test.py
... #省略其它结果
$ !284
$ python test.py
ack
ack 大家相对就不是那么熟悉了,它是「一个类似于 grep 并且为程序员优化过的工具」。它在默认情况下以递归方式搜索,但是会忽略版本控制工具目录,比如 .git 目录。并且它自带很多很实用的工具,可以大大提高我们搜索效率。
我们同样再拿出上面的例子来举例,下面我们使用 ack 命令来实现仅在 py 文件中搜索 import 关键字的方法:
# ack 命令实现方式
$ ack import --py
# grep 命令实现方式
$ grep -rins --include \*.py import .
上面是仅在 py 文件进行搜索,那假如我们想搜索除 py 文件类型以外的所有其他类型的文件,要怎么操作?
对于每个文件类型,都有一个对应的 no 标识,来排除对这个文件类型搜索。比如,想搜索 py 文件的话就使用 --py 选项,而想排除 py 文件的话就使用 --nopy 选项。
2020 精选 阿里/腾讯等一线大厂 面试、简历、进阶、电子书 公众号「良许Linux」后台回复「资料」免费获取
$ ack import --nopy
当然文件类型有非常之多,我们还可以通过修改 ~/.ackrc 文件来扩展文件类型。假如我们现在想搜索 .conf 文件,默认情况下 ack 不支持这种文件:
$ ack hello --conf
Unknown option: conf
ack: Invalid option on command line
要注册 .conf 文件类型,我们可以将以下内容添加到 ~/.ackrc 文件中,之后我们就可以正常搜索 conf 文件了。
--type-set=conf=.conf
配置文件修改之后,我们可以使用 --help-types 选项来确认自定义类型是否已经成功加上。
ack 命令从 .ackrc 文件中获取配置信息,但如何你想脱离 .ackrc 文件来运行 ack 命令的话,可以使用 -noenv 选项。
The Silver Searcher
该搜索器是另一个类似于 ack 的 grep 替代品,其更快的性能让大家很推崇。它有个非常实用的特点,那就是它会忽略在项目工程中的 .gitignore 文件所指定的文件。所以如果你想排除搜索一些文件,就可以将那些文件写在 .gitignore 文件里。
如果说 the silver searcher 大家可能不是很熟悉,但它的另一个名字可以就有点如雷贯耳了:ag 命令。
在 Ubuntu 系统上可以使用以下命令来安装 ag 命令:
$ apt-get install silversearcher-ag
使用 ag 命令来搜索 py 文件里包含关键字 import 的内容:
$ ag import --py
ag 命令十分强大,限于篇幅本文只介绍它最基本的用法,改天有时间的话再补充一下它其它非常强大的功能用法。
sift
sift 是使用 Golang 编写的 grep 替代品,这意味着它可以在 Linux,Windows,OS X 和其他系统上使用。它的速度快得离谱,而且有一些很酷的用例来代替 grep + awk 组合来提取数据。
2020 精选 阿里/腾讯等一线大厂 面试、简历、进阶、电子书 公众号「良许Linux」后台回复「资料」免费获取
我们再使用 sift 命令来搜索所有 py 文件里包含 import 关键字的内容:
# 只搜索 py 文件:
sift --ext py import
# 排除 py 文件
sift --exclude-ext py import
RipGrep
RipGrep 与 Silver Searcher 类似,可以在 Mac、Linux 和 Windows 上运行。它的 readme 文件声称,RipGrep 通常比其他任何搜索工具都快,它推崇 Rust 的正则表达式引擎,并像Silver Searcher一样使用 .gitignore 文件来排除一些文件或目录。
RipGrep 通常简称为 rg ,我们再使用 rg 命令来搜索所有 py 文件里包含 import 关键字的内容:
rg --type=py import
小结
命令行下有很多实用的搜索工具,恰当地使用这些工具会给我们的工作提高很大的效率。本文介绍了 5 个常用的搜索工具,但限于篇幅无法作深入介绍。更详细的介绍可以参阅网络上的一些文章,或者它们的 man page,后面我也会陆续对每个命令进行详细介绍,记得关注哦~
看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!
- 关注原创公众号「良许Linux」,第一时间获取最新Linux干货!
- 公众号后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
- 关注我的博客:lxlinux.net
Linux 命令行下搜索工具大盘点,效率提高不止一倍!的更多相关文章
- Linux系统——28个命令行下的工具
Unix/Linux下的28个命令行下的工具 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不 ...
- Linux命令行下的vim文本编辑器
Linux命令行下的vim文本编辑器 下面这个网站的地址讲解的非成分清楚!!!! http://blog.csdn.net/niushuai666/article/details/7275406 学习 ...
- 详解Linux命令行下常用svn命令
1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...
- Linux命令行下常用svn命令
1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...
- 在linux命令行下执行php 程序
如何在linux命令行下,执行php程序. 例子 打印当前时间 php -r "echo time()" 随机输出一个数字 php -r "echo rand(1,20) ...
- Linux命令行下cp,rm,mv命令的使用
以下的内容来源于<鸟哥的私房菜> Linux命令行下的复制.删除与移动:cp,rm,mv cp(copy)复制 cp这个命令的用途很多,除了单纯的复制之外,还可以创建链接文件 ...
- linux命令行下svn常用命令
linux命令行下svn常用命令 1. 将文件checkout到本地目录 1 #path是服务器上的目录 2 svn checkout path 3 4 #示例 5 svn checkout svn: ...
- Linux命令行下如何终止当前程序
Linux命令行下如何终止当前程序 快捷键: Ctrl+c 在命令行下起着终止当前执行程序的作用, Ctrl+d 相当于exit命令,退出当前shell Ctrl+s 挂起当前shell(保护作用很明 ...
- QrenCode : linux命令行下生成二维码图片
原文链接:http://wowubuntu.com/qrencode.html # 作者:riku/ / 本文采用CC BY-NC-SA 2.5协议授权,转载请注明本文链接. 对于二维码大家应该并不陌 ...
随机推荐
- 2007 NOIP T1奖学金
奖学金(07NOIPT1): [题目描述] 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果 ...
- 关于JS垃圾回收机制
一.垃圾回收机制的必要性 由于字符串.对象和数组没有固定大小,所以当它们的大小已知时,才能对它们进行动态的存储分配.JavaScript程序每次创建字符串.数组或对象时,解释器都必须分配内存来存储那个 ...
- Redis的三大问题
一般我们对缓存读操作的时候有这么一个固定的套路: 如果我们的数据在缓存里边有,那么就直接取缓存的. 如果缓存里没有我们想要的数据,我们会先去查询数据库,然后将数据库查出来的数据写到缓存中. 最后将数据 ...
- 数据源管理 | PostgreSQL环境整合,JSON类型应用
本文源码:GitHub·点这里 || GitEE·点这里 一.PostgreSQL简介 1.和MySQL的比较 PostgreSQL是一个功能强大的且开源关系型数据库系统,在网上PostgreSQL和 ...
- pytorch seq2seq闲聊机器人
cut_sentence.py """ 实现句子的分词 注意点: 1. 实现单个字分词 2. 实现按照词语分词 2.1 加载词典 3. 使用停用词 "" ...
- php-fpm运行原理
来源:https://blog.csdn.net/sinat_38804294/article/details/94393621 一.php-fpm由来1.cgi (common gateway in ...
- thinkphp5.0--auth权限
一般auth权限有四个表: think_admin:注册表, think_auth_group_access:用户组明细表(关联), think_auth_group:用户组表, think_arut ...
- ajax发送时禁用按钮
css /*div无法点击*/ .div-cant-click { pointer-events: none; } 发送ajax实例 $.ajax({ url:'url', type:'post', ...
- 日志分析工具ELK(五)
八.Kibana实践 选择绝对时间和相对时间 搜索 还可以添加相关信息 自动刷新页面时间,也可以关闭 创建图像,可视化 编辑Markdown,创建一个值班联系表 值班联系表 保存 再创建一个饼图;查看 ...
- Tomcat系列教材 (一)- 教程
Tomcat系列教材 (一)- 教程 Tomcat是常见的免费的web服务器. Tomcat 这个名字的来历,Tomcat是一种野外的猫科动物,不依赖人类,独立生活. Tomcat的作者,取这个名字的 ...