使用 tee 将 ls 和 grep 输出导入 tail 命令(无需脚本)

使用 tee 将 ls 和 grep 输出导入 tail 命令(无需脚本)

我在运行日志文件时遇到问题。

我希望使用它ls来创建日志目录中的文件列表,并grep针对文件运行的特定实例/时间进行运行。我只想要每个文件的最后一行,所以我希望命令tail -1运行grep提供的文件列表。

我尝试过多种代码组合,但目前还没有成功;由于我花了很多时间,现在它更多的是好奇而不是有用。以下是我尝试过的几个例子:

ls | grep 2011_.._.._.._35_.* | tee >(tail -1)
ls | tee >(grep 2011_.._.._.._35_.*) | tail -1

此外,如果可能的话,我想使用单个命令行执行此操作,而不是创建脚本并运行循环。

答案1

修改!

你只想要最后一行每个日志档案 ...

您需要的命令xargs不是tee

 ls | grep '2011_.._.._.._35_.*' | xargs -n 1 -- tail -1

或者

 ls -1 2011_??_??_??_35_* | xargs -n 1 -- tail -1

tail -1这将针对通过命令(第一种情况)或 ls 命令找到的每个文件(第二种情况)调用该命令grep。请注意,如果文件包含空格或换行符,则此方法不起作用。如果您需要该情况的答案,请添加注释。

编辑 对于您的评论:

ls -1 2011_??_??_??_35_* | xargs -n 1 -I FILE -- sh -c 'echo ; echo "FILE"; tail -1 "FILE"'

稍微复杂一点,但也能处理名称中带有空格的文件。

"FILE"命令序列中的每个命令都echo ; echo "FILE"; tail -1 "FILE"将被一行输出替换ls。此命令序列将被传递到 shell 然后执行。

相关内容