использование опции grep --include? - PullRequest
3 голосов
/ 01 марта 2012

Я хочу найти все вхождения ncread в каждом файле .m в текущем каталоге и его подкаталогах.И я использую следующую команду:

grep -R --include="\.m" ncread .

Но команда ничего не возвращает.В справочной странице grep сказано, что:

--include=GLOB
  Search only files whose basename matches GLOB

Почему это не работает?Спасибо!

Ответы [ 4 ]

5 голосов
/ 01 марта 2012

glob не является регулярным выражением, поэтому вам нужно использовать синтаксис glob вместо синтаксиса regex: --include='*.m' (обратите внимание на одинарные кавычки: вы хотите выйти из glob, чтобы избежать расширения вашей оболочкой)

Сводка символов глобуса:

* - any number of any characters
? - any single character
[abc] - single 'a', 'b' or 'c' character
\ - escaping, e.g. \* = single '*' character

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

5 голосов
/ 01 марта 2012

Поскольку базовое имя, скажем, foobar.m равно foobar.

Используйте find и grep следующим образом:

find -name "*.m" | xargs grep "ncread"

или если в ваших именах файлов есть пробелы:

find -name "*.m" -print0 | xargs -0 grep "ncread"

Edit:
Вот как это сделать с помощью grep:

grep -R --include='*.m' ncread .
2 голосов
/ 25 сентября 2012

В случае, если кто-то все еще заинтересован, --include был сломан в grep версии 2.10 в моем точном ubuntu, и я исправил это, загрузив новую версию grep (2.14) с сайта GNU http://www.gnu.org/software/grep/#TOCdownloading и скомпилировавиз источника.

-download the archive called grep-2.14.tar.xz
-unpack it: xz -d grep-2.14.tar.xz
-untar it: tar -xf grep-2.14.tar
-remove the garbage: rm grep-2.14.tar
-go to its directory: cd grep-2.14
-do: ./configure
-then: make
-and finally: sudo make install

Теперь запустите grep --version, чтобы убедиться, что у вас установлена ​​версия 2.14.Если он все еще сообщает о старой версии, попробуйте закрыть окно терминала и открыть новую.

1 голос
/ 08 мая 2012

Попробуйте это

grep -R --include="\\.m" ncread *

На странице руководства grep говорится, что шаблон include является GLOB, но, по крайней мере, в моей системе cygwin я экспериментально подтвердил, что это на самом деле регулярное выражение.

...