我正在寻找重构以下命令:
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
根据需要添加任意数量。