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
排序并将结果传递给 grep
或 ag
,例如按日期排序:
grep "keyword" $(ls -1rt)
要按名称排序,请再次使用 ls
。对于 MacOS 值得一提的警告:您需要使用 GNU 的 ls
(brew install coreutils)及其 -U 标志:
ag "keyword" $(gls -U --color)
#在 MacOS 上按名称排序
正在尝试在多个文件中搜索关键字。但搜索结果未按文件修改日期或名称排序
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
排序并将结果传递给 grep
或 ag
,例如按日期排序:
grep "keyword" $(ls -1rt)
要按名称排序,请再次使用 ls
。对于 MacOS 值得一提的警告:您需要使用 GNU 的 ls
(brew install coreutils)及其 -U 标志:
ag "keyword" $(gls -U --color)
#在 MacOS 上按名称排序