过滤功能少于+ F

时间:2009-11-19 09:07:18

标签: less-unix

观看日益增长的日志文件时,例如“少-iS + F service.log”我想要 将显示限制为与特定模式匹配的行。

我试过像

这样的东西
less +F service.log | grep <pattern> | less +F

哪个不起作用。还

cat < service.log | grep <pattern> | less +F

没有做我想要的。看起来输入已经关闭了 少则不会显示变化。

如何将显示限制为与特定模式匹配的行?

5 个答案:

答案 0 :(得分:2)

这个问题已有很长的历史了,但我仍然认为值得添加解决方案。 与其先尝试grep然后减少使用,不如在内部使用过滤

怎么办?

简而言之:

  1. use less +F在文件上
  2. CTRL-C暂时中断“以下”操作
  3. 键入&和您的模式以启用过滤
  4. 发出+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

但是不会继续从不断增长的日志文件中读取新行。