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 

2 Solutions collect form web for “Loop до тех пор, пока grep не найдет текст в файле”

На странице 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 
  • solaris 10 + отображать 2 строки после матча grep?
  • Выберите содержимое, соответствующее определенному контенту из файла, и переместите его в выходной файл
  • Сценарий мониторинга хоста с меткой времени
  • Команда Sed запускается с жестко заданным значением в регулярном выражении, но с ошибкой с переменной в сценарии
  • Импорт параметров переменных среды с другого сервера
  • Массив Декартово произведение в bash
  • Как узнать, установлен ли пакет через yum в сценарии bash?
  • Параметр игнорируется при цитировании
  • Выполните эскиз строк сценария перед их запуском
  • Команда, чтобы получить счет списка заблокированных пользователей, разблокирован, истек
  • SSH на сервер, выполните команду обновления, которая продолжается даже после выхода из сеанса ssh
  • Interesting Posts

    Объединение строк в одну строку

    В bash, grep для строки, начинающейся с \, и присваивания результата с помощью обратных шагов

    Обновите 32-разрядную установку RHEL до 64-разрядной версии

    Суперблок реплик в ext4

    Проверить файл .bash_profile перед загрузкой?

    Постоянно задавать параметры ядра без grub?

    Общие библиотеки не могут быть найдены внутри сеанса экрана

    Безопасен ли «add-apt-repository» против вредоносной сети («MITM»)?

    Linux на планшете tegra для программирования

    Получите первое соответствие шаблону в строке, не использующей разрез

    Не удается войти в систему как root даже после сброса пароля

    Как реализован графический интерфейс Vim, если это программа, работающая на терминале?

    Не просыпаться после приостановки

    Не удалось синхронизировать кеш для репо 'обновлений'

    Подождите, пока процесс переднего плана испустит строку, затем отправьте на задний план

    Linux и Unix - лучшая ОС в мире.