Скриптинг Bash - Как найти строки, содержащие определенную строку

Скриптинг Bash - Как найти строки, содержащие определенную строку

Я пытаюсь написать скрипт (скажем, script1.sh), который находит строки, содержащие слова, которые я даю, в файлах, которые находятся в определенном каталоге и его подкаталогах, и только те, которые находятся в файлах с определенным расширением файла. Поэтому должен выдавать ./script1.sh python py this.is.what.i.look.forтакие результаты:

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

Я попробовал использовать grep -r для поиска в подкаталогах и мне удалось найти строки.

grep -r -e $3 $1

выдает мне строки, но не может отсеять другие файлы с другими расширениями, и я не смог найти способ включить $2 в код. Также я не смог поместить номера строк в середину. Я попытался разделить вывод на 2 части следующим образом: python/abc/file1.py: this.is.what.i.look.for and the line can contain other things as wellwith awk -F " " '{print $1}, но не смог собрать их обратно. Я хотел присвоить части вывода функции grep переменным, а затем собрать их обратно, но и это не сработало. t1="grep -r -e $3 $1 | awk -F " " '{print $1}'"Я попытался использовать " ", ' ' ,$() для присвоения значений, так как я не знал, какой из них использовать, но ни один из них не сработал.

решение1

По крайней мере grep, в GNU вы можете использовать --include--exclude) для ограничения совпадений в рекурсивном grep, используя выражение glob в стиле оболочки:

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

Вы можете добавить -nили --line-numberдобавить нумерацию. Наконец, не забудьте указать позиционные параметры - так

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

Связанный контент