Scripts Bash: cómo encontrar las líneas que contienen una determinada cadena

Scripts Bash: cómo encontrar las líneas que contienen una determinada cadena

Estoy tratando de escribir un script (digamos script1.sh) que encuentre las líneas que contienen las palabras que doy, en archivos que están en un determinado directorio y sus subdirectorios y solo aquellas que están en los archivos con cierto archivo. extensión. Entonces ./script1.sh python py this.is.what.i.look.fordebería dar resultados como estos:

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())

Intenté usar grep -r para buscar en los subdirectorios y logré encontrar las líneas.

grep -r -e $3 $1

me da las líneas pero no elimina otros archivos con diferentes extensiones y no pude encontrar una manera de incluir $2 en el código. Tampoco pude poner los números de línea en el medio. Intenté dividir el resultado en 2 partes de esta manera: python/abc/file1.py: this.is.what.i.look.for and the line can contain other things as wellcon awk -F " " '{print $1}pero no pude volver a juntarlas. Quería asignar las partes de la salida de la función grep a variables y luego volver a juntarlas, pero tampoco lo logré. t1="grep -r -e $3 $1 | awk -F " " '{print $1}'"Intenté usar " ", ' ' ,$() para asignar valores ya que no sabía cuál usar pero ninguno funcionó.

Respuesta1

Al menos con GNU grep, puedes usar --include(y --exclude) para restringir las coincidencias en un grep recursivo, usando una expresión global estilo shell:

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

Puedes agregar -no --line-numberagregar la numeración. Finalmente, recuerde citar los parámetros posicionales, por lo que

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

información relacionada