2015-02-06 38 views
1

我有兴趣在特定文件类型中查找字符串。 下面的命令服务于我的目的。限制grep命令只能打印文件名一次

find /any/path -type f -name "*.log" | xargs grep -B2 -A2 'SUMMARY' {} \; 

它提供了以下的输出:

-- 
/path/to/file.log-line1 
/path/to/file.log-line2 
/path/to/file.log:text SUMMARY text 
/path/to/file.log-line1 
/path/to/file.log-line2 
-- 

我想不预先考虑到各行的文件名。是否可以输出如下?

-- 
/path/to/file.log 
line1 
line2 
text SUMMARY text 
line1 
line2 
-- 

回答

1

如果你在使用bash Linux上运行这一点,你可以使用bash脚本是这样的:

#!/bin/bash 
for fn in `grep --include \*.txt -lr 'SUMMARY' /any/path`; do 
     echo $fn 
     grep -A2 -B2 'SUMMARY' $fn 
done 

这会找到一个递归的方式启动包含单词“摘要”中的所有文件从目录“/ any/path”。所有匹配的文件然后按名称打印,匹配的部分用第二个grep行打印。