观看日益增长的日志文件时,例如“少-iS + F service.log”我想要 将显示限制为与特定模式匹配的行。
我试过像
这样的东西less +F service.log | grep <pattern> | less +F
哪个不起作用。还
cat < service.log | grep <pattern> | less +F
没有做我想要的。看起来输入已经关闭了 少则不会显示变化。
如何将显示限制为与特定模式匹配的行?
答案 0 :(得分:2)
这个问题已有很长的历史了,但我仍然认为值得添加解决方案。 与其先尝试grep然后减少使用,不如在内部使用过滤
怎么办?简而言之:
use less +F
在文件上CTRL-C
暂时中断“以下”操作&
和您的模式以启用过滤+F
重新启用“以下”操作有关Unix&Linux StackExchange上的此答案的更多详细信息
答案 1 :(得分:1)
如果您不介意每行产生和拆除几个进程,请使用read while循环
tail -f filename.log|while read line; do echo $line | grep pattern; done
答案 2 :(得分:1)
我还没有找到如何在没有临时文件的情况下执行此操作,但这是一个演示功能grep
- 过滤less +F
(清除其临时文件)的脚本。我称之为lessf
。
其中一个关键元素是--line-buffered
grep
参数,允许tail
输出继续流经管道(unbuffer
命令由{{1}提供为任何程序提供类似的功能。)
expect
使用示例:
#!/bin/sh
LOGFILE=$1
shift
PATTERN=$@
TEMP_DIR=/tmp/lesstmp
TEMP_FILE="$TEMP_DIR/$(basename $LOGFILE)"
[ ! -d $TEMP_DIR ] && mkdir $TEMP_DIR
trap 'rm -rf "$TEMP_DIR"; exit' INT TERM EXIT
( tail -f "$LOGFILE" | grep --line-buffered $PATTERN ) > "$TEMP_FILE" | less +F "$TEMP_FILE"
trap - INT TERM EXIT
lessf /var/log/system.log foobar
答案 3 :(得分:0)
tail -f service.log | grep <pattern>
答案 4 :(得分:-1)
解决方案似乎只是
LESSOPEN='|grep <pattern> %s' less +F service.log
但是不会继续从不断增长的日志文件中读取新行。