1

Я использую grep из Gnuwin32 на Windows.

Выполнение:

grep -r INSERT *.sql

Урожайность:

grep: *.sql: Invalid argument

Есть идеи почему?

3 ответа3

2

Потому что нет файла * .sql.

2

Согласно инструкции Grep:

-r с grep - это рекурсивный поиск в каталоге, поэтому для его использования вы указываете начальный каталог, а не маску файла.

например:

grep -r INSERT . будет просматривать все файлы для INSERT, начиная с текущего каталога (.) и рекурсивно прорабатывая подпапки.

Чтобы указать рекурсивную проверку папок и указать подстановочный знак для ограничения поиска, вы можете использовать параметр --include :

grep -r --include "*.sql" INSERT .

Подобный вопрос / информация о StackOverflow: Как мне выполнить рекурсивный поиск?

1

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 с регулярным выражением, но, по моему опыту, он довольно хрупкий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .