尾部 -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 file.log | cut -d'?' -f2 | sed 's/ HTTP/1.1" 200 -/ /g' | grep -E "parameter1|parameter2"

结果:

parameter1=valueN
parameter2=valueN

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

谢谢你@shellter!

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

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

但是现在我得到"..."每当有与表达式不匹配的输出时,我宁愿不打印任何内容。此外,我将进一步研究非 unicode 字符的问题。谢谢!