我想 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
顺便说一句,您可能可以摆脱grep
和cut
管道,并使用:
stdbuf -i0 -o0 -e0 tail -f /tmp/test | awk '/Killed/{print substr($0,length($0)-43)}'