【问题标题】:Filter function for less +Fless +F 的过滤功能
【发布时间】:2010-12-18 05:27:52
【问题描述】:

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

我尝试了类似的东西

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

这是行不通的。还有

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

没有做我想做的事。看起来输入已经关闭并且 less 没有显示变化。

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

【问题讨论】:

    标签: less-unix


    【解决方案1】:

    这个问题已经很久了,但我仍然认为值得添加一个解决方案。 与其尝试先 grep 然后使用 less,不如在 less 中使用 过滤

    简而言之:

    1. use less +F 在您的文件中
    2. CTRL-C暂时中断“跟随”动作
    3. 输入 &amp; 和您的模式以启用过滤
    4. 发出+F 以重新启用“关注”操作

    Unix&Linux StackExchange 上有关此答案的更多详细信息

    【讨论】:

    • 赞啊!!我找到了Linux stackexchange,但不明白。很高兴找到您的逐步解释! :)
    • 直接从命令行执行此操作:less '+&amp;&lt;pattern&gt;^MF' service.log 其中^M 是通过键入 ctrl-v 然后输入获得的
    • 来自 bash,没有 C-v(引用插入):less $'+&amp;&lt;pattern&gt;\nF' service.log
    【解决方案2】:

    我还没有弄清楚如何在没有临时文件的情况下执行此操作,但这里有一个脚本,它演示了一个功能性的 grep-filtered less +F(它清理了它的临时文件)。我称之为lessf

    其中一个关键元素是grep--line-buffered 参数,它允许tail 输出继续流经管道(expect 提供的unbuffer 命令为任何程序提供类似的功能)。

    #!/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

    lessf /var/log/system.log -v nobar

    【讨论】:

    • 我想指出如何使用 tail|grep 和 less +F 之间的管道确保 Ctrl-C 将一次性杀死它们。我有类似的东西,但使用后台作业,效果不佳。
    【解决方案3】:

    如果您不介意每行生成和拆除几个进程,请使用 read while 循环

    tail -f filename.log|while read line; do echo $line | grep pattern; done
    

    【讨论】:

      【解决方案4】:

      解决方案似乎很简单

      LESSOPEN='|grep <pattern> %s' less +F service.log
      

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

      【讨论】:

      • 我 2009 年的原始答案似乎不再有效,即简单的解决方案确实会观察不断增长的日志文件
      【解决方案5】:
      tail -f service.log | grep <pattern>
      

      【讨论】:

      • 感谢您思考我的问题,尽管这并不是我想要的。我想拥有“更少”的功能,即在结果输出中滚动、搜索、突出显示。像“tail -f service.log | grep | less +F”之类的东西,不幸的是没有这样做。
      猜你喜欢
      • 2016-03-24
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多