
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.for
deberí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 well
con 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 -n
o --line-number
agregar la numeración. Finalmente, recuerde citar los parámetros posicionales, por lo que
grep -nr --include="*.$2" -e "$3" "$1"