Estoy tratando de encontrar archivos que contengan una palabra específica usando grep
. Hay muchos archivos en el directorio (> 500)
Comando que ejecuto
$ grep 'delete' *
Salida
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
Estos son los archivos que no contienen la coincidencia dada. Quiero suprimir esas líneas para que no se muestren en la salida estándar. Sé de -q
interruptor, pero eso suprimiría la salida completa, lo cual no quiero.
¿Cómo hago eso?
Respuesta aceptada:
Ese es el comportamiento exhibido por grep -c
.
Probablemente tengas un archivo cuyo nombre comience con -
y contiene una c
carácter y está utilizando GNU grep sin establecer el POSIXLY_CORRECT
variable de entorno.
Usar:
grep -- delete *
o mejor:
grep delete ./*
--
marca el final de las opciones para que ese nombre de archivo no se considere como una opción (con un grep POSIX, no lo sería ya que la no opción delete
argumento habría marcado el final de las opciones), pero no resolvería el problema de un archivo llamado -
. El grep delete ./*
es más robusto pero tiene el inconveniente de generar el ./
adicional para archivos coincidentes (aunque eso puede considerarse una ventaja, ya que ayuda a identificar los nombres de archivo que contienen caracteres de nueva línea).