首页 > 解决方案 > Tails -f 使用多个管道对数据进行排序

问题描述

我有几行数据,如下所示:

255.255.255.255 -  - [dd/mm/yyyy hh:mm:ss] "GET /index.html?parameter1=valueN HTTP/1.1" 200 -
255.255.255.255 -  - [dd/mm/yyyy hh:mm:ss] "GET /index.html?parameter2=valueN HTTP/1.1" 200 -

但是我只想显示该行的这一部分:

parameter=value

但它必须通过与此类似的命令来完成,因为我需要 tails 可以提供的持续输出:

tails -f <file.log> | whatever

我可以删除该行的第一部分和最后一部分,但我无法弄清楚如何在一行中实现这一点。我有以下脚本可以随心所欲,但它只适用于 cat,而不适用于 tails:

cat file.log | cut -d'?' -f2 | sed 's/ HTTP\/1\.1\" 200 \-/ /g' | grep -E "parameter1|parameter2"

结果是:

parameter1=valueN
parameter2=valueN

我还尝试了其他几个带有 cut、tr 和 grep 的命令,这让我更接近我想要的,但仍然与我上面显示的不匹配。我该怎么办?

标签: linuxbashsed

解决方案


谢谢@shellter!

以下命令解决了我的问题:

tail -f file.log | sed 's/^.*[?]//;s/ .*$//;s/[0-9]//g'

但是现在,只要有与表达式不匹配的输出,我就会得到“...”,我宁愿什么也不打印。还有非 unicode 字符的问题,我将进一步研究。谢谢!


推荐阅读