你还在用grep吗?
mac下grep有bug
mac下,grep配合xargs会有bug
这个bug,会导致CPU占用持续200%,terminal假死,机器滚烫:
复现方法,是在代码根目录执行1
find . -name *.java | xargs grep -ri "文件过多我会死循环"
其实,这个命令在Ubuntu下面执行,是毫无压力的。多少文件都可以grep
在Mac下面, 这个命令中,grep前面的find . -name *.java | xargs
是很快执行完的, 跟grep一配合, 文件一多,就死掉了。单纯grep -ri "文件过多我会死循环"
也不会死。
grep的替代者ack
ack的安装
ack官网, mac下的安装方法:
1 | brew install ack |
ack的使用
- 速度与find 加grep差不多,7G的目录下, 搜一段java文本,也就不到10秒
- ack 要搜索的字符串, 比如:
ack HttpURLConnectionImpl
- 提速
主要是 忽略一些目录 + 指定文件类型:
1 | ack --ignore-dir=.git --ignore-dir=build --ignore-dir=.idea --type=java "要搜索的字符串" |
比ack更牛逼的ag
ag是更快、跟方便的ack the_silver_searcher
Ack and Ag found the same results, but Ag was 34x
faster
ag的用法
与ack用法基本一样,速度更快了,而且支持--java
来限制搜索的文件类型的范围
ag的封装—jgrep
把这个放到bashrc里面,变成好用的函数jgrep:
1 | function jgrep() |
就可以这样用了:1
jgrep HttpURLConnectionImpl