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
シェルは実行前に出力ファイルを生成しますgrep
。grep
コンテンツを追加する必要がある場合、ユーティリティはそのコンテンツをファイルに追加します。何も見つからない場合、grep
ファイルは空のままです。
grep
入力ファイルで一致するものが見つからない場合は、「失敗」を示すゼロ以外の終了状態で終了します。出力ファイルは削除されませんが、ファイルの削除に失敗した場合は、次のことができます。
grep 'PATTERN' infile >outfile || rm -f outfile
grep
一致しないPATTERN
場合は、削除空白がinfile
呼び出されます。厳密に言えば、失敗した場合はファイルを削除しようとします。rm -f
outfile
grep
どの理由(入力が読み取れないなど)または出力ファイルを生成できません。
一致するものがない場合でもスクリプトを終了するには:
if ! grep 'PATTERN' infile >outfile; then
rm -f outfile
exit
fi