Grep:与 -e 和 -o 选项一起使用
Grep: using with -e and -o options together
需要在一个 运行 中解析大日志文件并打印 id、address 和 service_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
需要在一个 运行 中解析大日志文件并打印 id、address 和 service_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