在日常使用Linux或macOS系统时,经常需要从一堆文件里找出包含特定内容的行。比如你写了一堆日志文件,想看看有没有报错信息,或者想找某个配置项写在哪行。这时候打开编辑器一个一个翻太慢了,直接用bash命令搜索文本才是正道。
最常用的:grep命令
grep是文本搜索的主力工具。比如你想在当前目录下的所有.log文件中查找包含“error”的行,可以直接运行:
grep error *.log
它会把每个匹配的行都打印出来,前面带上文件名,一目了然。
忽略大小写?加上-i参数
有时候你不确定是Error、error还是ERROR,可以加个-i让它不区分大小写:
grep -i error system.log
这样所有变体都能搜到。
递归搜索整个目录
如果想在整个项目目录里找某个函数调用,比如print_debug,可以用-r参数递归搜索:
grep -r print_debug /home/user/project/
它会深入每个子目录,把所有匹配的文件和行都列出来。
只看匹配了多少行?用-c统计
有时候你并不关心具体内容,只想知道某个关键词出现了多少次。比如统计日志里“timeout”出现的次数:
grep -c timeout access.log
输出就是一个数字,干净利落。
反向搜索:排除某些内容
你想看日志里除了正常状态以外的其他请求,可以用-v排除掉“200 OK”:
grep -v "200 OK" access.log
这样所有非成功响应都会被保留下来,方便排查问题。
配合其他命令使用
grep常和其他命令组合。比如查看进程时排除掉grep自己:
ps aux | grep nginx | grep -v grep
或者列出所有以字母开头的行:
cat config.txt | grep ^[a-zA-Z]
这里的^表示行首,[a-zA-Z]代表任意字母。
别忘了正则表达式
grep支持基础正则,比如你要找邮箱格式的内容:
grep -E \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b data.txt
-E启用扩展正则,能更灵活地匹配复杂模式。
掌握这些bash命令搜索文本的技巧,处理日志、代码、配置文件都快得多。不用点开十几个文件手动翻,一条命令搞定,省下的时间喝杯咖啡不香吗?