我有一个名为log.log的实时日志文件,并希望在其中捕获一些匹配的模式和值:
实施例: log.log正在增长,我们正在搜索模式为“ResponseTime = VALUE”的行,我们想要提取匹配的VALUE:
我正在执行:
tail -F log.log | grep ResponseTime | cut -d = -f 2 | tr -d " "
我期待看到
VALUE1
VALUE2
.. etc
但它不起作用......我该怎么办?
谢谢你, 纳摩
===========
谢谢,现在有效。我在用: inotail -f log.log | stdbuf -oL grep ResponseTime | stdbuf -oL cut -d'=' - f 2 | stdbuf -oL tr -d“”
答案 0 :(得分:9)
答案 1 :(得分:1)
尝试将grep
更改为stdbuf -oL grep
。
有关详细信息,请参阅BASHFAQ/009。
答案 2 :(得分:1)
它不起作用的原因是某些命令不会刷新每个输出的STDOUT。因此,以后的命令永远不会被传递。
我只会在tail
之后使用一个命令,例如:
tail -F t.log | sed '/ResponseTime/!d;s/ResponseTime\s+=\s+(\d+)/\\1/'
答案 3 :(得分:-2)
如果要从输出中删除换行符,则可以执行以下任一操作:
| cut -d = -f 2|sed -e :a -e '$!N;s/\n//;ta'
| cut -d = -f 2|tr -d '\n'
| cut -d = -f 2|awk '{printf "%s",$0}'