Sto cercando di trovare file contenenti una parola specifica usando grep
. Ci sono molti file nella directory (> 500)
Comando eseguo
$ grep 'delete' *
Uscita
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
Questi sono i file che non contengono la corrispondenza indicata. Voglio sopprimere quelle righe dalla visualizzazione allo stdout. Conosco -q
interruttore, ma ciò sopprimerebbe l'output completo, cosa che non voglio.
Come faccio?
Risposta accettata:
Questo è il comportamento mostrato da grep -c
.
Probabilmente hai un file il cui nome inizia con -
e contiene un c
carattere e stai usando GNU grep senza impostare il POSIXLY_CORRECT
variabile di ambiente.
Usa:
grep -- delete *
o meglio:
grep delete ./*
--
segna la fine delle opzioni in modo che quel nome file non venga considerato come un'opzione (con un POSIX grep, non lo sarebbe poiché la non opzione delete
argomento avrebbe segnato la fine delle opzioni), ma non risolverebbe il problema di un file chiamato -
. Il grep delete ./*
è più robusto ma ha lo svantaggio di produrre l'extra ./
per la corrispondenza dei file (anche se può essere considerato un bonus poiché aiuta a identificare i nomi di file che contengono caratteri di nuova riga).