欢迎光临散文网 会员登陆 & 注册

善用 grep 去寻找

2023-07-18 07:49 作者:Mr蓝珲  | 我要投稿

如何使用 grep 去寻找含有特定字符串的所有文件? 这是文字工作者日常工作时常执行的任务。


回答是用 -r 参数(取recursive 的首字母)。


极简使用示例:grep -r 'recommend' .


其中, 'recommend' 是我需要搜索的词, 最后的一个点号(.)不要忘了,代表我要搜索的地方是当前的目录以及所有的子目录。


该命令的几种有趣变形

想要显示匹配的行号。 grep -rn 'recommend' . 在 -r 后面添加 n 选项。


嫌输出太多,我只要文件名及其路径。 grep -rl 'recommend' .  在 -r 后面添加 l 选项。


只要匹配源代码,不需要匹配二进制文件(比如 pyc 文件)。 grep -ra 'recommend' . 在 -r 后面添加 a 选项。


只需要匹配 recommend, 不需要匹配 recommended。 grep -rw 'recommend' .  在 -r 后面添加 w 选项。


排除隐藏文件夹,比如 .git。 grep -r --exclude-dir="\.git" 'recommend' .  添加  --exclude-dir 选项。 "\.git" 表示不去匹配名字为 .git 的文件夹。 排除特定的文件也可以,就是把  --exclude-dir 改为 --exclude, 去掉 -dir。排除后,输出结果的速度可以提升数倍。


不排除任何文件夹,0.407 秒。

$ time grep -rl 'recommend' . 

./.gitignore

./main.py

./services/services.py

./services/__pycache__/services.cpython-38.pyc

./services/__pycache__/services.cpython-311.pyc

grep -rl 'recommend' .  0.37s user 0.03s system 99% cpu 0.407 total


排除 .git 文件夹, 0.119  秒。

$ time grep -rl --exclude-dir="\.git" 'recommend' . 

./.gitignore

./main.py

./services/services.py

./services/__pycache__/services.cpython-38.pyc

./services/__pycache__/services.cpython-311.pyc

grep -rl --exclude-dir="\.git" 'recommend' .  0.11s user 0.01s system 98% cpu 0.119 total


同时排除 .git 文件夹与 __pycache__ 文件夹, 0.104 秒。

$ time grep -rl --exclude-dir="\.git" --exclude-dir="__pycache__" 'recommend' .

./.gitignore

./main.py

./services/services.py

grep -rl --exclude-dir="\.git" --exclude-dir="__pycache__" 'recommend' .  0.09s user 0.01s system 97% cpu 0.104 total


总结


grep 有诸多选项,可以提升我们的搜索效率。比如,rawnl, exclude。 

善用 grep 去寻找的评论 (共 条)

分享到微博请遵守国家法律