0

grep コマンドを実行して結果を出力するスクリプトを実行したいと考えています。grep が 1 行を返すことを期待していますが、一致する行がない場合 (たとえば、grep されたファイルが存在しない場合) を処理したいと考えています。のようなものを実行する方法はありますか

line = grep ...
if line is empty
   print "\n"
else
   print line
4

2 に答える 2

3

必要なことは、grep の戻りコードを調べることだけです。

grep行が一致した場合は 0 を返し、行が一致しなかった場合は 1 を返します。エラーが発生した場合は、1 より大きい値を返します。

$ echo "hi" | grep hi
hi
$ echo $?
0
$ echo "hi" | grep hello
$ echo $?
1
于 2013-10-07T05:50:41.553 に答える
1

特定の状況 (bash スクリプトの場合など) では、ステータス 1 で終了しset -eたくありません。これは、提供された式が一致しない場合です。grepgrep

したがって、 1 (またはそれ以上) の終了ステータスが、呼び出し元の端末またはスクリプトに戻されるのを防ぐにgrepは、次を使用します。

grep "EXPR" FILE.txt || echo "No match found"

考えられる結果:

  1. 「EXPR」は FILE.txt で一致します - 出力:一致のリスト
  2. "EXPR" は FILE.txt で一致しません -出力: "一致するものが見つかりません"
  3. grep への不適切な引数またはファイルが見つからない (終了ステータス 2 以上) -出力 (STDOUT): "一致するものが見つかりません" (STDERR メッセージと共に)
于 2015-07-06T20:04:08.310 に答える