macOS下如何使用grep在多份tomcat访问日志中匹配多个关键词
解决方案
你原先的命令无法生效的核心原因是:默认状态下grep不会将目录作为扫描对象,你传入.作为路径时,grep只会把目录当成普通单个文件处理,无法遍历目录下的所有日志文件。
以下是适配macOS系统的可行实现方法:
方法1:通配符匹配(日志全部存放在当前目录、无嵌套子目录)
如果所有日志文件都直接放在当前目录下,没有嵌套子目录,直接用通配符指定所有日志文件即可,假设你的日志后缀为.log:
grep "/context" *.log | grep "\.com"
注:将.com的点转义为\.com是为了避免正则匹配到任意字符,防止出现xcom这类不符合预期的误匹配结果
方法2:递归扫描(日志存放在嵌套子目录/需要遍历所有层级文件)
如果日志有嵌套存放的情况,加上-r参数开启递归扫描即可,还可以通过--include参数限定仅扫描日志格式的文件,提升扫描效率:
grep -r --include="*.log" "/context" . | grep "\.com"
如果需要一步完成匹配避免二次管道,可以直接用正则同时匹配两个条件:
grep -r --include="*.log" "/context.*\.com\|\.com.*/context" .
方法3:配合find命令(需要更复杂的文件过滤规则)
如果需要对文件的修改时间、大小等属性做额外过滤,可以用find+exec的组合实现:
find ./ -type f -name "*.log" -exec grep "/context" {} + | grep "\.com"
内容的提问来源于stack exchange,提问作者saurav
相关产品推荐
相关产品推荐

