2015-02-06 34 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行打印。