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