Я использую grep из Gnuwin32 на Windows.
Выполнение:
grep -r INSERT *.sql
Урожайность:
grep: *.sql: Invalid argument
Есть идеи почему?
Потому что нет файла * .sql.
Согласно инструкции Grep:
-r
с grep - это рекурсивный поиск в каталоге, поэтому для его использования вы указываете начальный каталог, а не маску файла.
например:
grep -r INSERT .
будет просматривать все файлы для INSERT, начиная с текущего каталога (.
) и рекурсивно прорабатывая подпапки.
Чтобы указать рекурсивную проверку папок и указать подстановочный знак для ограничения поиска, вы можете использовать параметр --include
:
grep -r --include "*.sql" INSERT .
Подобный вопрос / информация о StackOverflow: Как мне выполнить рекурсивный поиск?
grep
- отличный инструмент с некоторыми интересными параметрами. Однако, как говорит его название (г lobally поиск р е XPression Регулярная и р RINT) она предназначена для согласования вещей. Если вы хотите найти файлы, используйте find
.
В этом случае, похоже, вы хотите найти текст INSERT
в файлах, которые находятся в этом дереве.
Для этого вам нужно сделать что-то вроде:
find -name "*.sql" grep -h INSERT {} \;
find -name "*.sql"
найдет все эти файлы, а затем grep -h
напечатает те, в которых есть текст INSERT
.
Почему ваш подход не работает?
Потому что, говоря grep -r ... *.sql
, bash пытается раскрыть этот *.sql
перед выполнением команды. Но ничто не соответствует *.sql
в вашем каталоге, поэтому он не может работать.
Вы можете использовать параметр --include
с регулярным выражением, но, по моему опыту, он довольно хрупкий.