Посмотрите на параметр --max-count
:
tail -f file.log | grep -m 1 'PATTERN'
Он выйдет после первой строки, которая соответствует PATTERN
.
РЕДАКТИРОВАТЬ : обратите внимание на комментарий @ Karoly ниже.Если скорость file.log
низкая, возможно, процесс grep
будет блокироваться до тех пор, пока в файл не будет добавлено дополнительное содержимое после соответствующей строки.
echo 'context PATTERN line' >> file.log ## grep shows the match but doesn't exit
напечатаетсовпадающая строка, но она не завершится, пока в файл не будет добавлено дополнительное содержимое (даже если у него еще нет новой строки):
echo -n ' ' >> file.log ## Now the grep process exits
В некоторых случаях (например, высокоскоростной файл журнала), это не имеет большого значения, потому что в любом случае, вероятно, скоро будет добавлено новое содержимое в файл.
Также обратите внимание, что такое поведение не происходит при чтении из консоликак в stdin, похоже, что разница в способе, который grep
читает из канала:
$ grep -m1 'PATTERN' - # manually type PATTERN and enter, exits immediately
$ cat | grep -m1 'PATTERN' # manually type PATTERN and enter, and it hangs