仅搜索文件的最后n行,以匹配没有此模式的文本模式和打印文件名

时间:2018-05-01 18:18:01

标签: bash grep tail

我想搜索给定文本模式的一堆类似命名文件的最后两行,并写出匹配为 NOT 的文件名。

我试过了:

tail -n 2 slurm-* | grep -L "run complete"

正如您所看到的,“slurm”是文件库,我想查找缺少“run complete”的文件。但是,此命令不会给我任何输出。我尝试了常规(非反向)问题:

tail -n 2 slurm-* | grep -H "run complete"

我得到一堆输出(找到的所有匹配但不是文件名):

(standard input):run complete

我认为我误解了grep的尾部输出是如何工作的,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这应该有效 -

for file in `ls slurm-*`;
do
res=`tail -n2 $file | grep "run complete" 1>/dev/null 2>&1; echo $?`;
  if [ $res -ne 0 ];
  then
    echo $file ;
  fi ;
done ;

说明 -

“echo $?”给我们grep命令的返回码。如果grep在文件中找到模式,则返回0.否则返回码为非零。

我们检查这个非零返回码,然后“回显”文件名。既然你没有提到grep的输出是否必要,我通过将它发送到/ dev / null来丢弃STD_OUT和STD_ERR。

相关问题