特定の単語を含むファイル検索を使用しようとしています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
これは、特定の一致を含まないファイルです。この行が標準出力に表示されないようにしたいと思います。私は-q
スイッチについて知っていますが、これは私が望んでいない出力全体を抑制します。
どうすればいいですか?
答え1
次へ追加
| grep -v ':0$'
あまりエレガントではありませんが、私の考えではそれを行うと思います。
コマンドを追加すると-l
一致のみが表示されますが、ファイルごとの一致数は印刷されません。
答え2
を使用すると、grep -l
一致する項目が1つ以上含まれているファイルのみがインポートされます。
ファイルにいくつかの一致があるかについての情報が必要ですか?-c
これは、ファイル内の一致するアイテムの数を計算するために使用をスキップできるためです。
編集:Warlockが言ったように、-I
このバイナリで抑制マッチングを使用するのも良い考えかもしれません。
答え3
これが現れた動作ですgrep -c
。
-
たぶん名前が文字で始まり、文字を含むファイルがあり、環境変数をc
設定せずにGNU grepを使用している可能性があります。POSIXLY_CORRECT
使用:
grep -- delete *
またはより良い:
grep delete ./*
--
ファイル名がオプションとして処理されないように、オプションの終わりを表示します(POSIX grepの場合、オプション以外の引数はオプションの終わりを示すため処理されdelete
ません)。ただし、という名前のファイルの問題は解決されません-
。より強力ですgrep delete ./*
。欠点は、./
一致するファイルに対して追加のコンテンツを出力することです(これは改行文字を含むファイル名を識別するのに役立ちますので、利点と見なすことができます)。
答え4
Laurentiuの答えと同様に、リストを-l
grepのファイル入力として使用することもできます。
grep -r "pattern" -c $(grep -rl "pattern")
grepの色を保存できますが、バックグラウンドで同じことを行うことができます。