tail -f,但带有行号

Ale*_*ura 29 logs ubuntu text-processing portability

我试图查看在远程服务器上任意时间内foo bar出现了多少次/var/log/foo.log,但到目前为止我尝试过的一切都没有奏效。

我已经有了一个计时器脚本,我用它来跟踪自从我开始 tailing 以来已经过去了多长时间/var/log/foo.log,现在我只想知道一种方法来告诉foo bartailed 输出中出现了多少次。

我搜索了谷歌,但在结果的前 10 页中没有找到任何相关内容。

这是我尝试过的令人沮丧的结果:

## works on local machine, but doesn't work as expected on remote
tail -f /var/log/foo.log | grep foo\ bar | sed '='

## works on local, but not remote
tail -f /var/log/foo.log | grep foo\ bar | cat -n -

##  works on local, but not remote
tail -f /var/log/foo.log | grep foo\ bar | awk -F'\n' '{printf "[%d]> ", NR; print $1}'
Run Code Online (Sandbox Code Playgroud)

我什至尝试编写一个类似于 的 sed 脚本tail -f,但我在这方面取得了有限的进展。

笔记

远程服务器正在运行的coreutils的旧版本,升级是一种选择,但不是以任何方式所需的解决方案。

pet*_*rph 36

tail -f | nl
Run Code Online (Sandbox Code Playgroud)

对我有用,这是我想到的第一个 - 也就是说,如果你真的想要从 1 开始编号的行,而不是从文件中看到的真实行号。grep如果需要,可以选择添加到适当的位置(之前或之后nl)。但是,请记住可能会发生缓冲。在我的特殊情况下,grep--line-buffered选项,但nl缓冲它的输出并且没有关闭它的选项。因此tail | nl | grep组合并不能很好地流动。

那说,

tail -f | grep -n pattern
Run Code Online (Sandbox Code Playgroud)

也适用于我。编号再次从“拖尾”的开头而不是整个日志文件的开头开始。


Ada*_*lin 20

我觉得这个更好。。

less -N +F <filepath>
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下为什么你认为它更好吗? (4认同)
  • 显示以整个文件为参考的行号。尾巴 -f | nl 显示以tail 的第一个输出为参考的行号。 (3认同)
  • 这非常方便,解决了OP的*标题*,但没有解决他们的*问题*。他们想知道 X 在文件中出现了多少次 :P (2认同)

slm*_*slm 7

您还可以将输出通过管道传输到less,它具有行号功能,-N可让您在日志中来回滚动。

$ tail -f /var/log/foo.log | less -N
Run Code Online (Sandbox Code Playgroud)

例子

  1 Jan 17 22:11:58 greeneggs fprintd[4323]: ** Message: entering main loop
  2 Jan 17 22:12:01 greeneggs su: (to root) saml on pts/5
  3 Jan 17 22:12:28 greeneggs fprintd[4323]: ** Message: No devices in use, exit
  4 Jan 17 22:12:56 greeneggs gnome-session[1876]: 22:12:56 | Git | personal_repo | Checking for remote changes...
  5 Jan 17 22:12:56 greeneggs gnome-session[1876]: 22:12:56 | Cmd | personal_repo | git rev-parse HEAD
  6 Jan 17 22:12:56 greeneggs gnome-session[1876]: 22:12:56 | Cmd | personal_repo | git ls-remote --heads --exit-code "ssh://sam@sparkleshare.jake      
  6 8us.org/home/sam/SparkleShare/personal_repo.git" master
  7 Jan 17 22:12:58 greeneggs gnome-session[1876]: X11 forwarding request failed on channel 1
  8 Jan 17 22:12:58 greeneggs gnome-session[1876]: 22:12:58 | Git | personal_repo | No remote changes, local+remote: 532213be48cce3b93cb177d409faa      
  8 03b71d0cfa5
  9 Jan 17 22:13:35 greeneggs gnome-session[1876]: 22:13:35 | ListenerTcp | Pinging tcp://notifications.sparkleshare.org:443/
 10 Jan 17 22:13:35 greeneggs gnome-session[1876]: 22:13:35 | ListenerTcp | Received pong from tcp://notifications.sparkleshare.org:443/
Run Code Online (Sandbox Code Playgroud)

注意:注意输出。你可能喜欢也可能不喜欢这个特性,但它需要很长的行并将它们切碎,以便它们在下一行继续,但仍然保持相同的相应行号。在解析很宽的日志文件时,我发现此功能非常有用!您可以在第6行和第8行看到此功能的效果。