是否可以过滤尾部的输出?

是否可以过滤尾部的输出?

我想跟踪一个文件,但只输出包含特定字符串的行。这可能吗?

答案1

使用 grep。它就是为此目的而构建的。

要从 /var/log/syslog 的尾部查找包含“cron”的行,只需运行:

tail -f /var/log/syslog | grep cron

而且由于它接受标准输入上的任何内容,您也可以在任何其他命令的输出上使用它,通过与上面相同的方式进行管道传输(使用 | 符号)。

答案2

tail -f /var/log/messages | grep "myfilterword"

希望有所帮助。

答案3

这里还有其他一些想法,虽然不那么简单,但可能会提供一些有趣的额外灵活性:

首先,您可以使用 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。

答案4

另一个值得注意的技巧是,如果您有一个包含要省略的标题的 CSV 文件,例如:

% cat data.txt
fruit        dessert        calories
Apple        Pie            770
Banana       Pudding        625
Cherry       Cobbler        990
% tail -n +2 data.txt
Apple        Pie            770
Banana       Pudding        625
Cherry       Cobbler        990

无论输入有多长tail+n -2都会省略第一行。

相关内容