LGCB

查找

作为开发者,每天都在敲敲打打一些文件。在代码编辑器里经常涉及查找文件和字符串的操作,这里看看如何在命令行里实现。

本集主要涉三个命令:

要聊的内容分三部分:

locate

先来个超级简单的。

  locate pattern

这样会找到系统上的任何路径中包含 pattern 的文件和目录,用通配符表示就是 *pattern* ( pattern 前后可以有0个或是多个任意字符)。

举个例子

$ locate vimrc

如果要实现更为精确的搜索,可以用 –regexp 选项后面跟正则表达式。

但是,我们也会遇到奇怪的现象,比如现在有一个文件叫 happygrep.c ,但是如果运行 locate 去查找却找不到,奇怪,奇怪。

这个就要说到 locate 命令的运行原理了,打开它的 manpage

$ man locate

这里面有一句:“ locate 查找的是由 updatedb 这个命令生成的数据库“,这个也解释了为何 locate 找东西会那么快。

可惜,updatedb 命令一般每天自动运行一次。所以最近我们才创建的文件是找不到的,解决方法也简单,手动运行一下

$ updatedb

就好了。

find

find 命令就是你给它指定一个目录,它就帮你翻个底朝天。

这里有一个目录 mydir,里面的情况是

$ ls
a.txt
a.c
b.txt
subdir/

在当前目录找到文件后缀为 .txt 的文件

$ cd mydir
$ find .|grep .txt

还可以指定文件类型来进行筛选

$ find . -type f

找到文件是为了操作文件

$ find . -type f -exec ls -l '{}' ';'

查找当前目录下的文件内容,打印所有包含字符串 string 的行

$ find . -exec grep string '{}' ';'

打印出行号,加 -n

$ find . -exec grep -n string '{}' ';'

打印出文件名,加 -print

$ find . -exec grep -n string '{}' ';' -print

另外,如果在一个代码项目内查找,ack-grep 比 grep 更方便。请参考:

http://haoduoshipin.com/episodes/26

happygrep

上面 find 命令的输出有点乱,不好看,并且我也希望能很快的用编辑器打开匹配项进行编辑,所以就自己写了个工具,叫 happygrep https://github.com/happypeter/happygrep

可以使用 git clone 的方式来下载,让后按照 README 上给出的方式进行安装。

装好之后,就可以进入一个目录,例如 edocs,查找我们想要的字符串,例如 keynote

$ cd edocs
$ xxx keynote

可以敲 e 就可以打开相应的匹配项用 vim 来编辑了。

好,这次要聊的就是这些啦,更多内容大家参考: