Назад | Перейти на главную страницу

найти файлы и искать в хвосте

Следующее работает, как ожидалось.

find /opt/ -name "somefile.out" -exec grep 'Connection refused' {} \; | more

Но если я хочу искать только в хвосте найденных файлов, я не могу добавить tail или tail -100 вот так ...

find /opt/ -name "somefile.out" -exec grep 'Connection refused' tail {} \; | more

Как лучше всего искать текст в последних нескольких строках?

Кажется, это работает для меня, не уверен, что это лучший способ:

find . -name '*.log' -exec tail {} \; | grep GET | more

Главное, чтобы команды выполнялись в более правильном порядке.

Удачи!

Вероятно, здесь уже есть ответ на ваш вопрос: https://stackoverflow.com/questions/307015/how-do-i-include-a-pipe-in-my-linux-find-exec-command

Тем не менее, вы можете использовать perl как для работы с хвостом, так и для grep (примечание: это наполовину ирония из-за удивительной сложности, но это должно работать):

find /opt/ -name "somefile.out"  -exec  perl -ne 'push @a, $_; @a = @a[@a-NUMBEROFLINES..$#a]; END { foreach (@a) { print if /PATTERN/ } }' '{}' \;

Если вместо определенного диапазона строк вы хотите просканировать после того, как будет виден определенный "нижний колонтитул", Perl действительно облегчит вам задачу:

perl -ne 'print if /footer/ .. eof() and /PATTERN/'