1

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

grep text *.file дает мне все совпадения, а не последние.

ls *.file | xargs grep text | tail -n 1 дает мне последнюю строку последнего файла, который соответствует.

Так что я думаю, что хочу сказать:

ls *.file | (xargs grep text | tail -n 1)

Но я не уверен, как это сделать, или если это возможно.

2 ответа2

2

Используйте tail -n 1 в цикле for . Например:

for name in *.file; do
    grep -H text "$name" | tail -n 1
done

(Опция -H заставит grep всегда печатать имя файла, даже если был указан только один файл.)

0

Через tac запятую есть один oneliner, этот выходной файл от конца до начала:

find . -name *.log -exec sh -c "tac '{}' | grep -Hm1 text " \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .