Trova una stringa solo in un file specifico all'interno delle sottodirectory


10

Diciamo che devo trovare la funzione GetTypes()in tutti i file sorgente C # ( .cs) nelle directory / sottodirectory.

Ho usato grep -rn GetTypes *.cs, ma ho riscontrato un errore grep: *.cs: No such file or directory. Ho dovuto usare grep -rn GetTypes *, ma in questo caso mostra tutti i file non *.cssolo.

Quale comando devo usare per trovare la stringa solo nei .csfile?


Risposte:


12

Se la tua shell è bash ≥4, inserisci il shopt -s globstartuo ~/.bashrc. Se la tua shell è zsh, sei a posto. Quindi puoi correre

grep -n GetTypes **/*.cs

**/*.csindica tutti i file corrispondenti *.csnella directory corrente o nelle sue sottodirectory, in modo ricorsivo.

Se non stai eseguendo una shell che supporta **ma il tuo grep supporta --include, puoi fare un grep ricorsivo e dire grepdi considerare solo i file che corrispondono a determinati schemi. Nota le virgolette attorno al modello del nome del file: è interpretato da grep, non dalla shell.

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

Con solo strumenti portatili (alcuni sistemi non hanno grep -raffatto), utilizzare findper la parte di attraversamento della directory e grepper la parte di ricerca del testo.

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

Per impostare temporaneamente l' globstaropzione per una corrente di Bash 4+ shell, uso: shopt -s globstar.
tjanez,

8

Dovresti dare un'occhiata al piccolo grep / trovare sostitutivo noto come ack. È specificamente configurato per la ricerca nelle directory dei file di codice sorgente.

Il tuo comando sarebbe simile al seguente:

ack --csharp GetTypes

4

Se si utilizza GNU grep, è possibile specificare quali file includere in un attraversamento di directory ricorsivo:

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

(dove l'ultimo periodo indica l'attuale directory di lavoro come radice del traversal)


4

Sto usando una combinazione di find e grep:

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

Per find, è possibile sostituire .con una directory e rimuovere -namese si desidera cercare in ogni file.

Per grep, -bnstamperà la posizione e il numero di riga e --coloraiuterà i tuoi occhi evidenziando ciò che stai cercando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.