如何在Linux下使用grep搜索文件内容?高效查找文本的实用技巧分享

说白了,grep就是Linux里找文本的“神兵利器”,用好选项+正则表达式,日志分析、代码调试这些事都能轻松搞定。

先说最重要的,比如去年我们跑那个监控系统,用grep -r --max-depth=2 "error" .在3 000量级的代码库里找Bug,配合--exclude-dir="node_modules"过滤无关目录,比直接递归搜索快了至少5 0%。
另外一点,处理固定字符串时用grep -F "Failed"比正则高效多了,因为后者的转义字符会拖慢速度。
还有个细节挺关键的,当你看到grep -c "Error"统计日志行数时,记得用--exclude=".bak"排除临时备份,不然统计结果会乱。

我一开始也以为grep -n显示行号就够用了,后来发现不对,排查线上问题发现加上-B3 -A5 看上下文才真正解决问题。
等等,还有个事,用zgrep "warn" access.log.gz直接搜压缩文件,比先解压再grep省事多了。

最后提醒个坑:别在NFS挂载盘上用复杂正则,磁盘I/O瓶颈会让你怀疑人生。

Linux中使用grep命令搜索文件名及文件内容的方法

2 02 3 年,我那个朋友问我Linux里怎么用grep搜文件名和内容。
我说,先从文件里找名字,默认就是显示的,不额外操作。
然后,如果只想看文件名,就用-l,不匹配的就-L。

他说,那要找特定类型文件怎么办?我就说,用grep后面跟文件扩展名,比如.txt,.c,简单。

他又问,大小写不管怎么办?我答,用-i选项。

朋友又来问,怎么递归搜整个目录?我说,加-R选项。

他再问,匹配内容怎么高亮?我说,用--color=auto。

最后,他又问,怎么同时显示文件名和行号?我就说,-n和-H选项。

他似乎挺满意,但还想深挖,我就说,复杂点就结合find命令,比如find . -name ".c" -print | xargs grep "main(",这样既能找到.c文件,又能搜到包含"main("的行。

他说了句“嗯,挺全面的”,然后就去操作了。
我看着他操作,心想,这grep真是Linux搜索的好帮手啊。
算了,他应该能搞定了。