grep на Windows 7 Неверный аргумент

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

Выполнение:

grep -r INSERT *.sql

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

grep: *.sql: Invalid argument

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

3 ответа

Решение

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

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

например:

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

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

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

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

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

grep is a great tool with some interesting parameters. However, as its name says (g lobally search a r egular e xpression and p rint) it is meant for matching things. If what you want is to find files, use find,

In this case, it looks like you want to look for the text INSERT within files that are in this tree.

Для этого вам нужно сделать что-то вроде:

find -name "*.sql" grep -h INSERT {} \;

find -name "*.sql" найдет все эти файлы, а затем grep -h напечатает те, которые имеют текст INSERT в них.


Почему ваш подход не работает?

Потому что, говоря grep -r ... *.sqlБаш пытается расширить это *.sql перед выполнением команды. Но ничего не соответствует *.sql в вашем каталоге, поэтому он не может работать.

Вы можете использовать --include параметр с регулярным выражением, но, по моему опыту, он довольно хрупкий.

Другие вопросы по тегам