虽然手动一遍遍搜关键词特别费时间,而且还会漏掉上下文里的线索,但用 grep 的多模式搜索功能,就能一次性找出所有带指定字符串的行。日常工作中,只有当好几个关键词同时出现时,才说明问题真正暴露出来了。grep 默认用的是 Basic 正则表达式(BRE),但咱们可以通过 -E 或 --extended-regexp 切换到扩展正则表达式(ERE),写起来更顺手,像 OR 运算符 | 也不用再专门转义了。要是觉得需求更复杂点,还可以用 -P 或 --perl-regexp 启用 Perl 兼容正则表达式(PCRE),它的功能最多,但运行起来会慢一点。 在所有的正则运算符里,| 的优先级是最低的,所以咱们不需要额外加分组符号。具体用法上,你可以给 grep 加个引号把整个表达式包起来。如果关键词里有空格,记得用双引号包起来才行。当你想忽略大小写时,直接加个 -i 参数就行了。默认情况下,比如输 error 可能会匹配到 errorless 这样的词,这时候你得用 -w 参数,只匹配完整的单词。 不管是处理 nginx 日志里的 fatal、ERROR 还是 CRITICAL 错误信息,或者只是想找出包含某个短语的行,都可以用 grep 来搞定。其实不用太纠结到底是选 BRE 还是 ERE,看自己愿不愿意写反斜杠就行。只要注意大小写敏感的默认设置和整词匹配的选项别遗漏了。 除了直接搜索之外,grep 还能和其他命令配合着玩。你可以把搜索结果先排个序,或者去掉重复的行,再用管道符号把这些命令串起来。下次碰到多关键词搜索的活计,直接把这篇文章保存下来备用吧。