格式化来自fileA的grep输出:match1 fileA:match2到fileA:match1 match2?

时间:2017-10-26 00:42:45

标签: unix grep

我正在使用grep在文件夹中的文件中查找匹配项:

grep -inrw "Bob" 'Folder'

我得到了:

Folder/content/fileA.txt:12:    Bob was a good person
Folder/content/fileA.txt:18:    Bob is now even better

我知道我只能使用-l参数列出文件名,但是如果有办法以某种方式格式化输出,那么文件名只对文件中的所有匹配项出现一次,例如:

Folder/content/fileA.txt:
12: Bob was a good person
18: Bob is now even better

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用awk格式化输出。

grep -inrw Bob * |awk -F: '!a[$1]++ {print $1 FS} sub($1 FS, ""){print $0}'

第一个条件意味着第一次是否满足第一列。在那种情况下打印它。最后一个删除第一列(文件名)和FS :并打印包含其余内容的新行。这涵盖:匹配行中存在字符grep的情况。

例如

> cat file
Bob line
Bob: Hi there

输出

file:
1:Bob line
2:Bob: Hi there

另一种方法是运行grep -l,然后使用您的参数打印文件名和grep输出。

for f in `grep -l Bob *`; do echo $f':'; grep -inrw Bob $f; done