如何用grep筛选同时包含两个指定字符串的日志行?
用grep筛选同时包含两个特定字符串的行
当然可以,有几种常用方法实现:
方法1:管道串联两次grep
这是最直观的方式,先过滤出包含第一个字符串的行,再从结果中筛选包含第二个字符串的行:
grep "13/Dec/2022:11" access.log | grep "GET /fr/test"
方法2:单grep结合正则表达式
如果希望一次扫描完成(适合处理大日志文件),可以用扩展正则或Perl正则:
- 用扩展正则(
-E选项),覆盖两个字符串的先后顺序:
grep -E "13/Dec/2022:11.*GET /fr/test|GET /fr/test.*13/Dec/2022:11" access.log
- 用Perl正则(
-P选项),通过正向预查简化写法:
grep -P "(?=.*13/Dec/2022:11)(?=.*GET /fr/test)" access.log
测试示例
针对你提供的日志行:
access.log:site.ch 111.222.333.444 - - [13/Dec/2022:11:40:00 +0100] "GET /fr/test HTTP/1.1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
上述任意一种命令都会输出这一行,因为它同时包含两个目标字符串。
内容的提问来源于stack exchange,提问作者sdespont
相关产品推荐
相关产品推荐

