En Windows, habría hecho una búsqueda para encontrar una palabra dentro de una carpeta. Del mismo modo, quiero saber si una palabra específica aparece dentro de un directorio que contiene muchos subdirectorios y archivos. Mis búsquedas de sintaxis grep muestran que debo especificar el nombre del archivo, es decir grep string filename
.
Ahora, no sé el nombre del archivo, entonces, ¿qué debo hacer? Un amigo sugirió hacer grep -nr string
, pero no sé qué significa esto y no obtuve resultados (no hay respuesta hasta que emito un ctrl + c).
*
? O bien dará como resultado la expansión de comodines de shell (si hay nombres de archivo que coincidan con el patrón de comodines), o grep lo tomará como operador de repetición de 0 o más para el carácter anterior*
.grep -nr MobileAppSer* .
1. Supongamos que tenemos 3 archivos en el directorio actual encaja con elMobileAppSer*
patrón de comodines: nombreMobileAppServlet.java
,MobileAppServlet.class
,MobileAppServlet.txt
. A continuación,grep
se invoca como esto:grep -nr MobileAppServlet.class MobileAppServlet.java MobileAppServlet.txt .
. Significa buscar el texto "MobileAppServlet.class" en los archivos MobileAppServlet.java, MobileAppServlet.txt y en otras partes del directorio actual, que seguramente no es lo que el usuario quiere aquí.MobileAppSer*
patrón comodín,grep
recibirá el argumentoMobileAppSer*
tal cual y, por lo tanto, lo tomará como búsqueda de texto "MobileAppSe" seguido de 0 o más apariciones de "r", por lo que intente encontrar los textos "MobileAppSe", "MobileAppSer", "MobileAppSerr", "MobileAppSerrr", etc. en el contenido de los archivos del directorio actual, tampoco lo que el usuario desea.Notas adicionales: esto satisface la sintaxis
grep [options] string filename
porque en los sistemas tipo Unix, un directorio es un tipo de archivo (hay un término "archivo normal" para referirse específicamente a entidades que se llaman simplemente "archivos" en Windows).grep -nr string
lee el contenido para buscar desde la entrada estándar, es por eso que solo espera su entrada y deja de hacerlo cuando presiona ^ C (también se detendría en ^ D, que es la combinación de teclas para el final de -archivo).fuente
grep -inr "my word" .
-r
para grep significa buscar en subdirectorios de forma recursiva y-n
significa prefijar cada línea de salida con el número de línea correspondiente del archivo que contiene esa línea.man grep
describe todo esto y mucho más.GREP : Impresión / analizador / procesador / programa de expresión regular global.
Puede usar esto para buscar en el directorio actual.
Puede especificar -R para "recursivo", lo que significa que el programa busca en todas las subcarpetas, sus subcarpetas y las subcarpetas de sus subcarpetas, etc.
-n
imprimirá el número de línea, donde coincidió en el archivo.-i
buscará mayúsculas y minúsculas (mayúsculas / no mayúsculas).fuente
realizará una búsqueda RECURSIVA (es decir, el directorio y todos sus subdirectorios) para buscar la cadena de búsqueda. (según la respuesta correcta de usta).
La razón por la que no recibiste ninguna respuesta con la sugerencia de tu amigo de:
es porque no se especificó ningún directorio. Si está en el directorio en el que desea realizar la búsqueda, debe hacer lo siguiente:
Es importante incluir el '.' carácter, ya que esto le dice a grep que busque ESTE directorio.
fuente
También hay:
pero eso podría ser demasiado para un principiante.
find
es un walker / lister de propósito general,-type f
significa "buscar archivos sin formato en lugar de directorios y canalizaciones con nombre y lo que tiene",-print0
significa "imprimirlos en la salida estándar utilizando caracteres nulos como delimitadores". La salida defind
se envía axargs -0
y que toma su entrada estándar en fragmentos (para evitar las limitaciones de longitud de la línea de comando) utilizando caracteres nulos como separador de registros (en lugar de la nueva línea estándar) y se aplicagrep -li word
a cada conjunto de archivos. En elgrep
,-l
significa "enumerar los archivos que coinciden" y-i
significa "mayúsculas y minúsculas"; por lo general, puedes combinar opciones de un solo personaje para que veas con-li
más frecuencia que-l -i
.Si no lo usa
-print0
y-0
luego se encontrará con problemas con los nombres de archivo que contienen espacios, entonces usarlos es un buen hábito.fuente
man find
desde la línea de comandos para ver qué opcionesfind
admite.¿Por qué no hacer una búsqueda recursiva para encontrar todas las instancias en subdirectorios?
Esto funciona como un encanto.
fuente
grep -r "yourstring" *
Encontrará "yourstring" en cualquier archivo y carpetaAhora, si desea buscar dos cadenas diferentes al mismo tiempo, siempre puede usar la opción E y agregar palabras para la búsqueda. ejemplo después del descanso
grep -rE "yourstring|yourotherstring|$" *
buscará ubicaciones de listas dondeyourstring
oyourotherstring
coincidefuente
Otra opción que me gusta usar:
-type f te devuelve solo archivos y no carpetas
-exec y {} ejecuta el grep en los archivos que se encontraron en la búsqueda (la sintaxis exacta es "-exec command {}").
fuente
-R sigue también los enlaces simbólicos cuando -r no.
fuente
La respuesta que seleccionó está bien y funciona, pero no es la forma correcta de hacerlo, porque:
Esto realmente busca la cadena
"yourStrin"
y"g"
0 o muchas veces.Entonces, la forma correcta de hacerlo es:
Este comando busca la cadena con cualquier carácter antes y después en la carpeta actual.
fuente
grep -nr yourString
, también funciona, ya que busca lo desnudoyourString
en cualquier lugar de la línea (o al menos en mi sistema, OSX Lion)Similar a la respuesta publicada por @eLRuLL, una forma más fácil de especificar una búsqueda que respete los límites de las palabras es usar la
-w
opción:fuente
Ejecute (terminal) el siguiente comando dentro del directorio. Verificará recursivamente dentro de los subdirectorios también.
fuente
El siguiente ejemplo busca recursivamente
your search string
en los archivos*.xml
y*.js
ubicados en algún lugar dentro de las carpetaspath1
,path2
ypath3
.Por lo tanto, puede buscar en un subconjunto de los archivos muchos directorios, simplemente proporcionando las rutas al final.
fuente
No uses grep. Descarga Silver Searcher o ripgrep . Ambos son excepcionales y mucho más rápidos que grep o ack con toneladas de opciones.
fuente