Answers:
使用grep。它就是为此目的而构建的。
要从/ var / log / syslog的尾部查找包含“ cron”的行,只需运行:
tail -f /var/log/syslog | grep cron
并且由于它在stdin上接受任何内容,因此您也可以通过与上述相同的管道方式(使用|符号)在其他任何命令的输出上使用它。
这是另外一些想法,虽然不那么简单,但可能会提供一些有趣的附加灵活性:
首先,您可以使用awk而不是grep进行过滤:
tail -f /var/log/messages | awk '/myfilterword/'
与使用的示例完全相同grep
。您可以使用awk的功能对此进行扩展,例如:
tail -f /var/log/messages | \
awk '/myfilterword/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n")}'
这将打印输出的第6至最后一个字段(字段之间用空格隔开)
另一个类似的想法是使用perl单线:
tail -f /var/log/messages | perl -ne "/myfilterword/ and print"
完全像grep
。也许您需要一个行号计数器和仅第6个字段?这个怎么样:
tail -f /var/log/messages | \
perl -lane "/myfilterword/ and printf \"%6d %s\n\",++\$a,\$F[6]"
显然,所有这些事情也可以使用其他工具来完成,但是我想说明一下,这里有一些有趣的方法可以使用诸如awk或perl之类的通用语言。
grep
当非交互式使用它(例如它是较长的管道的一部分)时,它将缓冲。--line-buffered
当无法删除管道中的grep时,GNU grep 2.5.1提供了解决此问题的选项。(当我说grep将缓冲时,我的意思是直到缓冲达到4k为止,您才会看到输出。)