限制grep命令只打印一次文件名

时间:2015-02-06 07:00:34

标签: 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 个答案:

答案 0 :(得分: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

这将找到包含单词" SUMMARY"的所有文件。从目录" / any / path"开始以递归方式。然后按名称打印所有匹配的文件,并使用第二行grep打印匹配的部分。