Grep ключевое слово в нескольких файлах и сортировать результаты по дате изменения файла или имени

Попытка найти ключевое слово в нескольких файлах. но результаты поиска не сортируются по дате изменения файла или имени

ag grep tool:

ag "keyword"

инструмент grep:

grep -r "keyword"

Есть ли способ контролировать результаты сортировки по дате изменения файла или имени, как показано ниже?

Ожидаемый результат:

File_0.txt: результаты поиска

File_1.txt: результаты поиска

File_2.txt: результаты поиска

2 ответа

Решение

Просто сортируй с ls и передать результаты в grep или же agНапример, сортировать по дате:

grep "keyword" $(ls -1rt)

Для сортировки по имени используйте agin ls, Замечание, которое стоит упомянуть для MacOS: вам нужно использовать GNU ls (brew install coreutils) с флагом -U:

ag "keyword" $(gls -U --color) # сортировать по имени в MacOS

Если вы используете bashниже приводится вариант для получения grep результаты отсортированы по дате изменения:

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

Разбивка find выражение:

find * -type f -printf "%T@\t%p\0" |    # print last-mod date and filename, NUL-terminated
    sort -rz |                          # sort in reverse order
    cut -z -f2-                         # cut out time field
Другие вопросы по тегам