我想搜索给定文本模式的一堆类似命名文件的最后两行,并写出匹配为 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的尾部输出是如何工作的,非常感谢任何帮助。
答案 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。