我正在使用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
谢谢!
答案 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