11

テキスト ファイルにパターンのリストがあり、bzgrep を使用して複数のファイルを照合します。

for pattern in $(cat ~/patterns.txt); do echo $pattern; bzgrep -i $pattern *.bz2; done

現在のパターンに最初に一致した後に bzgrep (grep) を停止するにはどうすればよいですか (grep されている現在のファイルで停止するのではなく、完全に停止する必要があります)、次のパターンに進みます。「-m 1」パラメーターについて読みましたが、現在のファイルでのみ停止すると思います。何か案は?

ありがとう

4

5 に答える 5

13

grep の出力を にパイプしhead -n 1ます。これは、最初の行をプル (および渡し) し、残りを無視します (つまり、ソース パイプを強制終了します)。

于 2009-03-30T23:07:55.753 に答える
5
for pattern in $(< ~/patterns.txt); do
  echo "$pattern"
  for i in *.bz2; do
    bzgrep -i "$pattern" "$i" && break
  done
done

-H を grep に追加して、行だけでなく filename:line を表示することもできます。

于 2009-03-30T23:09:03.037 に答える
4

-q(--quiet別名--silent) スイッチを使用することもできます。次に、コマンドが正常に完了したかどうかを確認します。これは何も出力せず、一致が見つかるとすぐに検索を停止し、成功または失敗を返すだけです。

于 2009-03-30T23:08:06.750 に答える
1

次に例を示します。

for i in  ~/bin/*; do grep -m 1 lua $i /dev/null && break; done

同じことができbzgrepます; 最初の一致が成功した後、ループを終了します。

/dev/nullオプションを認識しないある種の恐竜grepがある場合に備えて、含めるとファイル名が取得され-Hます。

于 2009-03-31T00:13:00.900 に答える
0

http://betterthangrep.com/でack を使用する場合、まさにこの理由で -1 フラグを使用できます。

于 2009-05-09T03:47:50.847 に答える