Однажды у меня была версия grep на моем ПК (я думаю, что она шла с ранней версией Delphi), которая поддерживала поиск во вложенных папках с ключом -r
. Теперь кое-что (я подозреваю более позднюю версию Delphi) взломало старый grep и заменило его чем-то, что объявляет себя таким образом:
C:\PROJECTS\>grep --version
grep (GNU grep) 2.4.2
Copyright 1988, 1992-1999, 2000 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
он предоставляет следующие опции для рекурсии:
-d, --directories=ACTION how to handle directories
ACTION is 'read', 'recurse', or 'skip'.
-r, --recursive equivalent to --directories=recurse.
но я не могу заставить его возвращать результаты из файлов в папках, поэтому grep -r fred *.txt
будет искать только файлы в текущей папке, содержащей "fred", а файлы в подпапках игнорируются.
Какая магическая опция требуется здесь?
ОТВЕТ от Rich Homolka ниже, но вот мой пакетный упаковщик, разработанный из этого ответа:
:==========================================================================
: GrepExt - searches files matching an extension recursively for a string
:
: Usage : call GrepExt <regex string to search for> <extension>
: Example : call GrepExt "procedure\ *Add" pas
:
: Notes : - quotes only needed if regex contains spaces
: - remove the first "-i" for case-sensitive search
: - the second "-i" ensures the case of the extension doesn't matter
: - ErrorLevel set to 0 if there were any matches, 1 otherwise
: - this is very inefficient when the folders contain a large
: number of files that don't match the extension, as *all* files
: are grepped and the results are then grepped to filter out
: the hits from files that don't match the extension.
:
@echo off
grep -i -r "%~1" . | grep -i "^[^:]*\.%~2:"