Loop до тех пор, пока grep не найдет текст в файле

У меня есть файл с именем file.txt . Содержимое файла выглядит следующим образом

 sunday monday tuesday 

Я написал сценарий ниже, и он просто отлично grep если grep не может найти шаблон, который упоминался

 until cat file.txt | grep -E "fdgfg" -C 9999; do sleep 1 | echo "working..."; done 

Но мое требование состоит в том, что приведенный выше сценарий должен зацикливаться до тех пор, пока текст, указанный в шаблоне grep , не исчезнет в file.txt

Я попытался использовать флаг L с grep. Но это не сработало.

 until cat file.txt | grep -EL "sunday" -C 9999; do sleep 1 | echo "working..."; done 

На странице grep man:

 EXIT STATUS Normally the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred. However, if the -q or --quiet or --silent is used and a line is selected, the exit status is 0 even if an error occurred. 

Поэтому, если строка присутствует, статус выхода равен 0. Так как на bash 0 истинно (поскольку стандартный «успешный» статус выхода программ равен 0), вы должны иметь что-то вроде:

 #!/bin/bash while grep "sunday" file.txt > /dev/null; do sleep 1 echo "working..." done 

Почему именно вы прокладываете sleep 1 для echo ? Хотя это работает, это не имеет большого смысла. Если вы хотите, чтобы они были встроены, вы могли просто написать sleep 1; echo "working..." sleep 1; echo "working..." и если вы хотите, чтобы echo выполнялось до задержки, вы могли бы иметь его перед вызовом sleep например, echo "working..."; sleep 1 echo "working..."; sleep 1 .

Это должно сделать работу:

 #!/bin/bash while true ; do echo "Working..." result=$(grep -nE 'sunday' file.txt) # -n shows line number echo "DEBUG: Result found is $result" if [ -z $result ] ; then echo "COMPLETE!" break fi sleep 1 done