为什么 tail+grep+cut 的组合不起作用?

为什么 tail+grep+cut 的组合不起作用?

我想 grep 一些日志,同时跟踪它们,并仅打印每行的一部分,因为这些行太长。

我不明白为什么我使用的组合不起作用;程序如下:

echo 'Jun 29 16:27:00 someip rails[pid]: Killed a transaction
Jun 29 16:28:00 someip rails[pid]: Killed a transaction' > /tmp/test

# Shows the lines
tail -f /tmp/test | grep Killed

# Shows the lines
grep Killed /tmp/test | cut -c -43

# Shows the lines
cat /tmp/test | grep Killed | cut -c -43

# Doesn't show them
tail -f /tmp/test | grep Killed | cut -c -43

为什么最后一个组合不起作用?

答案1

正如评论中指出的,该问题是由于缓冲造成的。您可以做的是运行命令,stdbuf如图所示这里

stdbuf -i0 -o0 -e0 tail -f /tmp/test | grep Killed | cut -c -43

顺便说一句,您可能可以摆脱grepcut管道,并使用:

stdbuf -i0 -o0 -e0 tail -f /tmp/test | awk '/Killed/{print substr($0,length($0)-43)}'

相关内容