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?

prosseek
fuente

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 {} +
Gilles 'SO- deja de ser malvado'
fuente
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
Caleb
fuente
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)

maxschlepzig
fuente
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.

Kevin
fuente