【问题标题】:Linux tail + grep + lessLinux tail + grep + less
【发布时间】:2017-10-17 09:28:09
【问题描述】:

我想查看我网站访问日志的实时输出。我只想查看某些类型的条目,在这种情况下,匹配“.php”的条目。

这很好用,但换行到下一行,我不希望这样:

tail -f access-log | fgrep ".php" --line-buffered

这可以很好地避免换行,但它没有被过滤:

less +F -S access-log

我更喜欢查看不换行到下一行的文件,因为在输出中更容易看到结构,这就是我想要less -S 的目的。

这种工作,但“光标”不会停留在文件的底部,并且我输入的任何命令都会使less 挂起(按“SHIFT + f”以在流来时停留在底部):

tail -f access-log | fgrep ".php" --line-buffered | less -S

但这根本不起作用:

tail -f access-log | fgrep ".php" --line-buffered | less +F -S

那么,有没有办法实现我想要的?

我也采用了开箱即用的解决方案,可能会使用sed 进行剪切,这样每一行都不会比我的屏幕长?

【问题讨论】:

  • SO 是针对编程问题,而不是关于使用或配置 Linux 的问题。 SuperUser.com 或 unix.stackexchange.com 将是解决此类问题的更好地方。
  • 很抱歉,我认为这看起来更像是一个脚本,而不像 linux 的配​​置。我可以用 PHP 或任何其他语言实现同样的目标
  • 不是配置,只是普通命令行工具的使用。诚然,复杂的命令行和脚本之间有一条模糊的界线。但一个好的经验法则 (IMO) 是,如果它是一个没有变量的单行代码,它就不是真正的脚本。
  • 你当然是对的,这就是为什么我赞成你的评论。我不介意比我更精明的人将这个问题转移到另一个堆栈交换站点。

标签: linux grep feed tail less-unix


【解决方案1】:

考虑使用watch 命令:

watch -n1 tail access-log | fgrep ".php" --line-buffered

【讨论】:

  • 你能解释一下这是做什么的吗?我只使用了诸如ls -hal 之类的东西,我需要监视文件大小的变化等。
  • 此命令将监视access-log 中的实时错误,刷新间隔为1s
【解决方案2】:

我建议使用 bash:

tail -f access-log | fgrep ".php" --line-buffered | cut -c 1-$COLUMNS

【讨论】:

  • 完美,谢谢:)...不过,如果有办法减少工作量,那会很好,如果我想保存输出或向上滚动或其他什么
【解决方案3】:

我已经为我的案例使用了公认的答案,但我想如果我真的想少用,因为我喜欢它还提供的其他功能,我可以这样做:

tail -f access-log | fgrep ".php" --line-buffered >> tmp.access-log

然后

less -S +F tmp.access-log

然后当我完成后,如果我不需要那个 tmp 文件,我就删除它。

【讨论】: