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).