Следующее работает, как ожидалось.
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/'