grep的好用,远不止找关键词这么简单。
你有没有遇到过,想要找不包含这个关键词的所有行?比如你想过滤掉所有日志里的静态资源请求,只看接口请求,直接加个-v参数就搞定,grep -v ".css" access.log,一下子就把所有包含.css的行都剔除了,剩下的就是你想要的内容。
这个功能用来过滤无用信息真的太香了,我平时排查问题,第一步就是用-v把一堆没用的警告信息去掉,整个日志瞬间清爽。
如果要找的关键词不区分大小写呢?比如你既想找"Error"也想找"error",不用分两次搜,加个-i参数,grep直接忽略大小写,一次就能把所有符合的结果都找出来。
想要统计一下一共有多少行符合条件,不用你自己数,加个-c参数,grep直接把行数给你输出出来。比如想看看今天一共有多少个404请求,grep -c "404" access.log,数字直接出来,省得你自己去数。
如果你的关键词不太固定,想要用正则表达式匹配怎么办?grep支持正则啊,用-E参数就能开启扩展正则表达式,不管你是匹配手机号、邮箱还是IP地址,都能轻松搞定。
比如你想从文本里找出所有的11位手机号,直接输 grep -E "1[3-9][0-9]{9}" text.txt,所有手机号直接给你筛出来,比手动找快几百倍。
很多人不知道,grep还能递归查找整个目录里的所有文件。比如你记得项目里有一行写了"test secret",但是忘了在哪个文件里,直接到项目根目录下敲 grep -r "test secret" .,grep会自动遍历当前目录下所有的文件,把每个符合条件的文件和行号都给你列出来,几秒钟就能找到,不用你一个文件一个文件打开找。
而且它还会自动跳过二进制文件,不会给你输出一堆乱码,这点真的很贴心。