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

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

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

ag "keyword"

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

grep -r "keyword"

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

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

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

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

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


person Lava Sangeetham    schedule 24.01.2019    source источник
comment
Попробуйте: grep -r "keyword" | sort   -  person John1024    schedule 24.01.2019


Ответы (2)


Просто отсортируйте с помощью ls и передайте результаты в grep или ag, например. для сортировки по дате:

grep "keyword" $(ls -1rt)

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

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

person gregory    schedule 31.01.2019

Если вы используете 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
person cody    schedule 24.01.2019