`tail -f` until text is seen
You can pipe the
tail -f into
sed, telling it to quit when it sees the line you're searching for:
tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q'
sed will output each line it processes by default, and exit after it sees that line. The
tail process will stop when it tries to write the next line and sees its output pipe is broken
tail -f my-file.log | grep -qx "Finished: SUCCESS"
-q, meaning quiet, quits as soon as it finds a match
grep match the whole line
For the second part, try
tail -f my-file.log | grep -m 1 "^Finished: " | grep -q "SUCCESS$"
-m <number> tells grep to stop after number matches
grep -q exit status will only be
SUCCESS is found at the end of the line
If you want to see all the output, you can't use
grep -q, but you can still do
tail -f my-file.log | grep -m 1 "^Finished: "
which does everything except set the exit status to 1 if
A variation on @Mikel's answer with @Mrozek's comments (I would have replied on the comment but I think i don't have enough privileges yet)
tail -f my-file.log | tee >( grep -qx "Finished: SUCCESS" )
would allow you to use @Mikel's solution and still see the output on the screen