J'essaie de trouver des fichiers contenant un mot spécifique en utilisant grep
. Il y a beaucoup de fichiers dans le répertoire (> 500)
Commande je lance
$ grep 'delete' *
Sortie
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
Ce sont les fichiers qui ne contiennent pas la correspondance donnée. Je veux empêcher ces lignes de s'afficher sur stdout. Je connais -q
switch, mais cela supprimerait la sortie complète, ce que je ne veux pas.
Comment faire ?
Réponse acceptée :
C'est le comportement présenté par grep -c
.
Vous avez probablement un fichier dont le nom commence par -
et contient un c
caractère et vous utilisez GNU grep sans définir le POSIXLY_CORRECT
variable d'environnement.
Utiliser :
grep -- delete *
ou mieux :
grep delete ./*
--
marque la fin des options afin que ce nom de fichier ne soit pas considéré comme une option (avec un grep POSIX, ce ne serait pas le cas puisque la non-option delete
aurait marqué la fin des options), mais cela ne résoudrait pas le problème d'un fichier appelé -
. Le grep delete ./*
est plus robuste mais a l'inconvénient de sortir le ./
supplémentaire pour les fichiers correspondants (bien que cela puisse être considéré comme un bonus car cela aide à identifier les noms de fichiers contenant des caractères de nouvelle ligne).