grepは必要な単語を取得できませんが、Linuxは次のタスクに進みます。どうやって防ぐことができますか?

grepは必要な単語を取得できませんが、Linuxは次のタスクに進みます。どうやって防ぐことができますか?

txtファイルが多いです。これには、「最小」(各ファイルに一度だけ表示される)という単語が含まれており、その単語を含む行を取得してその行を新しいファイルに表示したいと思います。
これを行うには、次のコマンドを使用します。

grep 'Minimum' file1.txt > new1.txt     

私はすべてのファイル(file1、file2など)に対してこれを行い、多くのものを得ましたnewn.txt。しかし、一部のファイルには「最小」という単語がないため、空であることがわかりましたnewn.txt。それでは、grepが単語を取得できない場合、Linuxはなぜエラーメッセージを表示しませんか?引き続きnewn.txtを生成するのはなぜですか?空のファイルを提供することは本当に迷惑です。それでは、単語が見つからない場合に
単語の生成を防ぐ方法はありますか?newn.txt

また、これをbashスクリプトに入れるつもりです。 grepコマンドは最初のステップで、2番目のステップではnewn.txt単語をgrepするため、grepが単語を見つけられないか空のファイルを作成します。 、手順2を実行せずにスクリプトを停止したいと思います。これを行う方法はありますか?

ベストアンサー1

シェルは実行前に出力ファイルを生成しますgrepgrepコンテンツを追加する必要がある場合、ユーティリティはそのコンテンツをファイルに追加します。何も見つからない場合、grepファイルは空のままです。

grep入力ファイルで一致するものが見つからない場合は、「失敗」を示すゼロ以外の終了状態で終了します。出力ファイルは削除されませんが、ファイルの削除に失敗した場合は、次のことができます。

grep 'PATTERN' infile >outfile || rm -f outfile

grep一致しないPATTERN場合は、削除空白がinfile呼び出されます。厳密に言えば、失敗した場合はファイルを削除しようとします。rm -foutfilegrepどの理由(入力が読み取れないなど)または出力ファイルを生成できません。

一致するものがない場合でもスクリプトを終了するには:

if ! grep 'PATTERN' infile >outfile; then
    rm -f outfile
    exit
fi

おすすめ記事