grepがファイル内のテキストを見つけることができなくなるまで繰り返し

grepがファイル内のテキストを見つけることができなくなるまで繰り返し

というファイルがありますfile.txt。内容は次のとおりです。

sunday
monday
tuesday

grep上記のパターンが見つからない場合は、よく繰り返される次のスクリプトを作成しました。

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

しかし、私の要件は、上記のスクリプトがパターンに記載されているテキストがgrep消えるまで繰り返す必要があるということです。 file.txt

私はLgrepでこのフラグを使ってみました。しかし、それはうまくいきませんでした。

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

ベストアンサー1

grepマニュアルページから:

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.

したがって、行が存在する場合、終了状態はゼロです。 Bash では 0 が true であるため (プログラムの標準 "成功" 終了状態が 0 であるため) 実際には次のような内容がなければなりません。

#!/bin/bash

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

一体なぜsleep 1パイプラインが欲しいのでしょうかecho?作業中はあまり意味がありません。インラインにしたい場合は書き込むことができ、遅延の前に実行するには、sleep 1; echo "working..."次のように呼び出しの前に置くことができます。echosleepecho "working..."; sleep 1

おすすめ記事