使用“grep”时,在“tail”的输出中添加回车符

使用“grep”时,在“tail”的输出中添加回车符

我正在寻找重构以下命令:

tail -f production.log |
    grep -e "Processing " -e "compatible;" -e "Completed in " -e

这是命令的输出:

处理 BasketController#cross_sell_product (针对 85.189.237.x,时间为 2011-08-03 12:46:07) [POST] “RequestLog”,“2011-08-03 12:46:07”,“12595”,“www.website.com”,“/basket/cross_sell_product/113”,“85.189.237.x”,“Mozilla/5.0 (兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)” 完成时间为 0.07853 (12 个请求/秒) | 渲染:0.01402 (17%) | DB:0.01439 (18%) | 200 OK [https://www.website.com/basket/cross_sell_product/113]

这太棒了,正是我想要的,但是我希望看到的是之后一两次返回,这样我就可以将日志作为块进行研究。

我尝试添加\n到最后,但这没有用。

答案1

我不确定你想要什么,但 awk 可能可以轻松做到。要在每个匹配行后添加额外的换行符:

tail -f production.log |
awk '/Processing|compatible;|Completed in / {print; print ""}'

要在所有非连续匹配行块之间添加换行符:

tail -f production.log |
awk '
/Processing|compatible;|Completed in / {
    if (NR == n+1) print "";
    n = NR;
    print;
}'

答案2

grep将过滤掉空行,因为它们与任何模式都不匹配。如果原始文件中出现空行分隔符,您可以让它们通过,添加-e "^$".

如果原始文件中不存在这些空行,则必须添加它们。这是如何执行此操作的示例:

 tail -f production.log | grep -e … | sed 's/\(^Processing \)/\n\1/'

编辑:如果你想要一个空行每一个其他线路sed 's/$/\n/'代替使用。当然,您可以\n根据需要添加任意数量。

相关内容