Script Bash - Como encontrar as linhas que contêm uma determinada string

Script Bash - Como encontrar as linhas que contêm uma determinada string

Estou tentando escrever um script (digamos script1.sh) que encontre as linhas que contêm as palavras que forneço, em arquivos que estão em um determinado diretório e seus subdiretórios e apenas aqueles que estão nos arquivos com determinado arquivo extensão. Portanto, ./script1.sh python py this.is.what.i.look.fordeve dar resultados como estes:

python/abc/file1.py:11:    this.is.what.i.look.for and the line can contain other things as well
python/file2.py:412: this.is.what.i.look.for this.toggleButton.getElement())

Tentei usar grep -r para pesquisar nos subdiretórios e consegui encontrar as linhas.

grep -r -e $3 $1

me fornece as linhas, mas não consegue eliminar outros arquivos com extensões diferentes e não consegui encontrar uma maneira de incluir $2 no código. Também não consegui colocar os números das linhas no meio. Tentei dividir a saída em 2 partes assim: python/abc/file1.py: this.is.what.i.look.for and the line can contain other things as wellwith awk -F " " '{print $1}mas não consegui juntá-las novamente. Eu queria atribuir as partes da saída da função grep em variáveis ​​e depois juntá-las novamente, mas também falhei nisso. t1="grep -r -e $3 $1 | awk -F " " '{print $1}'"Tentei usar " ", ' ' ,$() para atribuir valores, pois não sabia qual usar, mas nenhum deles funcionou.

Responder1

Pelo menos com GNU grep, você pode usar --include(e --exclude) para restringir as correspondências em um grep recursivo, usando uma expressão glob no estilo shell:

grep -r --include='*.py' -e pattern dir

Você pode adicionar -nou --line-numberadicionar a numeração. Finalmente, lembre-se de citar os parâmetros posicionais - então

grep -nr --include="*.$2" -e "$3" "$1"

informação relacionada