为每个文件设置 grep 输出间隔

为每个文件设置 grep 输出间隔

当我对一堆文件执行 grep 操作,并且有几个文件包含我要查找的单词时,输出很难阅读,因为它是一个接一个的。无论如何,是否要在每个文件的匹配输出之后插入额外的 \n 。

例如,我得到的当前输出

$ grep word daily_log.201407*
<daily_log.20140702-matches  about 100 lines>
<daily_log.20140704-matches  about 10 lines>
<daily_log.20140706-matches  about 50 lines>

试图实现类似的目标

$ grep word daily_log.201407*
<daily_log.20140702-matches  about 100 lines>


<daily_log.20140704-matches  about 10 lines>


<daily_log.20140706-matches  about 50 lines>

希望问题清楚。有办法做到这一点吗?

答案1

您可以 grep 每个文件并根据 grep 的结果添加额外的行(即不针对不匹配的文件):

for fn in daily_log.201407* ; do
grep word "$fn"
if [ $? == 0 ] ; then
   echo -e '\n\n\n'
fi
done

答案2

最简单的方法可能是awk反而:

awk 'FNR==1 { print "\n\n\n" } ; /word/ { print FILENAME ":" $0 }' daily_log.201407*

这会打印出word与之前的文件名匹配的每一行(就像grep处理多个文件一样)。在每个文件的第一行之前,它会打印一些空行。它知道它位于文件的开头,因为FNR(当前文件中的行号)是1

相关内容