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 ./* より堅牢ですが、余分な ./を出力するという欠点があります 一致するファイルの場合(ただし、改行文字を含むファイル名を識別するのに役立つため、ボーナスと見なされる場合があります)。