tail -F log.log | grep ResponseTime | cut -d = -f 2

时间:2011-03-14 06:26:23

标签: bash unix pipe

我有一个名为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“”

4 个答案:

答案 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}'