Encuentra una cadena solo en un archivo específico dentro de subdirectorios


10

Digamos que necesito encontrar la función GetTypes()en todo el archivo fuente de C # ( .cs) los directorios / subdirectorios.

Solía grep -rn GetTypes *.cs, pero recibí un error con grep: *.cs: No such file or directory. Tuve que usar grep -rn GetTypes *, pero en este caso muestra todos los archivos no *.cssolo.

¿Qué comando necesito usar para encontrar la cadena solo en los .csarchivos?


Respuestas:


12

Si tu caparazón es bash ≥4, ponlo shopt -s globstaren tu ~/.bashrc. Si tu caparazón es zsh, estás bien. Entonces puedes correr

grep -n GetTypes **/*.cs

**/*.cssignifica todos los archivos que coinciden *.csen el directorio actual, o en sus subdirectorios, de forma recursiva.

Si no está ejecutando un shell que admite **pero su grep es compatible --include, puede hacer un grep recursivo y decirle grepque solo considere archivos que coincidan con ciertos patrones. Tenga en cuenta las comillas alrededor del patrón de nombre de archivo: se interpreta por grep, no por el shell.

grep -rn --include='*.cs' GetTypes .

Con solo herramientas portátiles (algunos sistemas no tienen grep -rnada), use findpara la parte transversal del directorio y greppara la parte de búsqueda de texto.

find . -name '*.cs' -exec grep -n GetTypes {} +

Para establecer temporalmente la globstaropción para una corriente Bash 4+ cáscara, utilice: shopt -s globstar.
tjanez

8

Deberías revisar el pequeño y gigante reemplazo grep / find conocido como ack. Está específicamente configurado para buscar en directorios de archivos de código fuente.

Su comando se vería así:

ack --csharp GetTypes

4

Si usa GNU grep, puede especificar qué archivos incluir en un recorrido recursivo del directorio:

grep --include '*.cs' -rn GetTypes .

(donde el último período denota el directorio de trabajo actual como raíz del recorrido)


4

Estoy usando una combinación de find y grep:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

Para find, puede reemplazar .por un directorio y eliminar -namesi desea buscar en cada archivo.

Para grep, -bnimprimirá la posición y el número de línea y --colorayudará a sus ojos resaltando lo que está buscando.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.