grep
を使用して特定の単語を含むファイルを検索しようとしています 。ディレクトリには多くのファイルがあります(> 500)
実行するコマンド
$ grep 'delete' *
出力
validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines
これらは、指定された一致を含まないファイルです。それらの行がstdoutに表示されないようにしたい。 -q
を知っています 切り替えますが、それでは完全な出力が抑制されます。これは望ましくありません。
どうすればいいですか?
承認された回答:
これがgrep-c
によって示される動作です 。
おそらく、名前が-
で始まるファイルがあります。 c
が含まれています 文字であり、 POSIXLY_CORRECT
を設定せずにGNUGrepを使用している 環境変数。
使用:
grep -- delete *
以上:
grep delete ./*
-コード> そのファイル名がオプションと見なされないように、オプションの終わりをマークします(POSIX grepを使用すると、オプション以外の
delete
以降はオプションと見なされません。 引数はオプションの終わりを示します)が、-
というファイルの問題には対処しません。 。 grep delete ./*
より堅牢ですが、余分な ./
を出力するという欠点があります 一致するファイルの場合(ただし、改行文字を含むファイル名を識別するのに役立つため、ボーナスと見なされる場合があります)。