首页 > 解决方案 > Grep:与 -e 和 -o 选项一起使用

问题描述

需要一次性解析大日志文件并打印找到的请求的idaddressservice_name。问题是service_name在请求正文中相当大。

如果我列出所有带有-e选项的模式 -

grep -e 'ID: [0-9]\+' -e 'Address: .*' -e ':Body><[^ ]*'

将打印完整的请求正文。

需要的是

grep -e 'ID: [0-9]\+' -e 'Address: .*' -o ':Body><[^ ]*'

或者

grep -o 'ID: [0-9]\+' -o 'Address: .*' -o ':Body><[^ ]*'

仅打印请求正文中作为服务名称的第一个单词;

但在这种情况下grep: :Body><[^ ]*: No such file or directory收到错误

UPD:使用-oe和正则表达式的解决方案有效,但结果-o显着减慢了操作

标签: linuxbashgrepsolaris

解决方案


如果没有看到您的日志,很难完全理解您的示例将返回什么。您可以尝试 -Eo 看看这是否有助于获得您想要的东西。您可能需要相应地调整正则表达式。-E 至少应该解决您收到的“grep: :Body><[^ ]*: No such file or directory”错误。

grep -Eo 'ID: [0-9]\+' -Eo 'Address: .*' -Eo ':Body><[^ ]*' myLog.log

推荐阅读