-1

我试图找出一种方法来总结 grep 结果并使用文件名而不是每一行显示结果。我知道 ripgrep 有这个功能。我浏览了 grep 手册页,但找不到类似的东西。

我有一个处理 ripgrep 结果的 python 脚本。如果我能得到类似的结果,希望为 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:
4

1 回答 1

2

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.

于 2021-07-30T19:51:58.083 回答