Grep 多个文件中的关键字并按文件修改日期或名称对结果进行排序

Grep keyword in multiple files and sort results by files modified date or name

正在尝试在多个文件中搜索关键字。但搜索结果未按文件修改日期或名称排序

ag grep 工具:

ag "keyword"

grep 工具:

grep -r "keyword"

有什么方法可以控制按文件修改日期或名称排序的结果,如下所示?

预期输出:

File_0.txt: 搜索结果

File_1.txt: 搜索结果

File_2.txt: 搜索结果

如果您使用的是 bash,以下选项可用于获取按修改日期排序的 grep 结果:

while IFS= read -r -d '' file; do
    grep -H "keyword" "$file"
done < <(find * -type f -printf "%T@\t%p[=10=]" | sort -rz | cut -z -f2-)

find 表达式的细分:

find * -type f -printf "%T@\t%p[=11=]" |    # print last-mod date and filename, NUL-terminated
    sort -rz |                          # sort in reverse order
    cut -z -f2-                         # cut out time field

只需使用 ls 排序并将结果传递给 grepag,例如按日期排序:

grep "keyword" $(ls -1rt)

要按名称排序,请再次使用 ls。对于 MacOS 值得一提的警告:您需要使用 GNU 的 ls(brew install coreutils)及其 -U 标志:

ag "keyword" $(gls -U --color) #在 MacOS 上按名称排序