Grep summary with file name 只有一次

Grep summary with file name only once

我正在尝试找出一种方法来总结 grep 结果并用文件名一次而不是每一行显示结果。我知道 ripgrep 有这个功能。我浏览了 grep 手册页,但找不到任何类似内容。

我有一个 python 脚本来处理 ripgrep 的结果。如果我能得到类似的结果,希望为 grep 重用相同的脚本

关于我们如何实施的任何建议。

当前 grep 输出

\grep  -r "else" .                                                                                                                                             
./historyChecker.py:        else:
./historyChecker.py:    else:
./historyChecker.py:    else:
./historyChecker.py:    else:

我想要得到的输出

historyChecker.py
77:#check if RG is installed else exit
84:        else:
102:    else:
148:    else:
225:    else:

grep 没有执行此操作的选项,因此您需要自己循环打印文件名。

find . -type f | while read -r filename; do
    if grep -q "else" "$filename"; then 
        echo "$filename"
        grep -n "else" "$filename"
    fi
done

不幸的是,这需要读取每个文件两次:首先检查是否存在匹配项以便打印文件名,然后打印所有匹配项。另一种方法是将 grep 输出写入临时文件,然后检查该文件是否非空并在其前面打印 $filename.