Ich versuche mit grep Dateien zu finden, die ein bestimmtes Wort enthalten . Es gibt viele Dateien im Verzeichnis (> 500)
Befehl, den ich ausführe
$ grep 'delete' *
Ausgabe
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
Dies sind die Dateien, die die angegebene Übereinstimmung nicht enthalten. Ich möchte unterdrücken, dass diese Zeilen in stdout angezeigt werden. Ich kenne -q umschalten, aber das würde die komplette Ausgabe unterdrücken, was ich nicht will.
Wie mache ich das?
Akzeptierte Antwort:
Das ist das Verhalten von grep -c .
Wahrscheinlich haben Sie eine Datei, deren Name mit - beginnt und enthält ein c Zeichen und Sie verwenden GNU grep, ohne den POSIXLY_CORRECT festzulegen Umgebungsvariable.
Verwendung:
grep -- delete *
oder besser:
grep delete ./*
-- markiert das Ende von Optionen, sodass dieser Dateiname nicht als Option betrachtet wird (bei einem POSIX-Grep würde dies nicht der Fall sein, da die Nicht-Option delete hätte das Ende von Optionen markiert), aber es würde das Problem einer Datei namens - nicht lösen . Das grep delete ./* ist robuster, hat aber den Nachteil, dass das zusätzliche ./ ausgegeben wird für übereinstimmende Dateien (obwohl dies als Bonus angesehen werden kann, da dies hilft, Dateinamen zu identifizieren, die Zeilenumbruchzeichen enthalten).