我有几行数据,如下所示:
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 字符的问题。谢谢!