grep -R работает, только если команда параметризована *? - PullRequest
1 голос
/ 11 февраля 2012

Очень странная ситуация.проверьте это:

billy@prog:~/sql$ grep -R temp_exchange *.sp
billy@prog:~/sql$ grep -R temp_exchange *
events/sumup_events_by_exchange.sp:drop table if exists temp_exchange;
events/sumup_events_by_exchange.sp:create temporary table temp_exchange

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

, поэтому я бы не стал параметризовывать эту команду с * какКажется, это плохая привычка.

Любой другой способ сделать то, что я хочу, без *?

TIA!

Дон

Ответы [ 2 ]

1 голос
/ 12 февраля 2012
grep -R --include=*.sp temp_exchange *

Последний аргумент (в данном случае *) сообщает grep, какие файлы и каталоги искать.
Это заставит grep искать список файлов, состоящий из всех файлов верхнего уровня, соответствующих шаблону, плюс (в рекурсивном режиме) ВСЕ файлы внутри каталогов.

В этих каталогах вы можете указать конкретные шаблоны файлов, используя опцию --include.

С http://ss64.com/bash/grep.html

 -R
 -r
 --recursive
   Read all files under each directory, recursively; this is equivalent to the -d recurse option. 
 --include=PATTERN
   Recurse in directories only searching file matching PATTERN. 
 --exclude=PATTERN
   Recurse in directories skip file matching PATTERN.
0 голосов
/ 11 февраля 2012

Потому что с * .sp происходит глобализация в текущей папке. поэтому он просматривает все файлы и папки в текущей папке с расширением .sp в конце.

Сделайте ls *.sp, чтобы увидеть, что вы передаете команде. В вашем примере все происходит правильно.

Возможно, вы захотите сделать find . | grep "\.sp$" | xargs grep temp_exchange или подобный вариант, используя find

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...