Grep:与 -e 和 -o 选项一起使用

Grep: using with -e and -o options together

需要在一个 运行 中解析大日志文件并打印 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 显着减慢了操作速度

如果您只想打印与这 3 个正则表达式匹配的文件的位,并且这三个正则表达式永远不会在同一行,您可以使用 \|,这是 grep 的逻辑或:

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

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

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