Нахождение подстроки в файлах через подкаталоги с единственной встроенной командой?

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

Например, Ubuntu имеет свободную базу данных с инструментальным средством формирования запросов командной строки (geoiplookup) в geoip-binInstall geoip-binпакете . Но это только показывает информацию о стране и использует помехи (следовательно устаревший) база данных. Этот инструмент может также запросить базу данных MaxMind GeoIP, если у Вас есть подписка там.

Существуют различные базы данных GeoIP, которые можно искать. Они обычно предназначаются, чтобы быть просмотренными через веб-браузер, но можно искать сценарий очистки. Например, вот рубиновый сценарий для получения данных из базы данных MaxMind. Обратите внимание, что очистка может быть против условий предоставления услуг базы данных.

10
15.04.2011, 23:41
6 ответов

GNU grep позволяет искать рекурсивно через подкаталоги:

grep -r --include='*.h' 'the string' .
19
27.01.2020, 20:00
  • 1
    я попробовал эту точную командную строку в Ubuntu, но доберитесь "grep: недопустимая опция - 'M'", хотя я не вижу 'M', нигде... озадачивающего –  Guido Domenici 14.02.2011, 16:45
  • 2
    @Guido, Хорошо работает здесь средства –  phunehehe 14.02.2011, 17:15
  • 3
    В предложенное редактирование TomasG рекомендует изменить последнее * кому: '*': "Заключение в кавычки последнего подстановочного знака необходимо для предотвращения ошибок, когда некоторое имя файла запускается с -" –  Michael Mrozek♦ 14.02.2011, 18:07
  • 4
    В странном скручивании событий это теперь работает на меня также, как вводится в исходный ответ.Спасибо! –  Guido Domenici 14.02.2011, 18:34
  • 5
    @Guido: Ваша проблема, возможно, произошла из-за файла в названном текущем каталоге -Msomething, или к a GREP_OPTIONS установка. –  Gilles 'SO- stop being evil' 14.02.2011, 22:43

grep -r searchpattern /path/to/start/in

Где /path/to/start/in/ может быть просто"."для текущего каталога.

2
27.01.2020, 20:00

Нет. find -name \*.h -print0 | xargs -0 grep -l 'the regex' является столь волшебным, как это добирается.

1
27.01.2020, 20:00
  • 1
    GNU grep имеет общие падежи, встроенные с -r опция. Никакая потребность в тяжелой артиллерии. –  Gilles 'SO- stop being evil' 14.02.2011, 22:44
  • 2
    xargs добавляет просто шум. Использовать find -name \*.h -execdir grep -l 'the regex {} + –  user unknown 16.04.2011, 01:47

есть ли какая-либо единственная, встроенная команда, которая работает через это волшебство...?

Чтобы быть педантичными, нет, Вы не можете предположить, что такая команда существует.

Существует много различных реализаций Unix, и у каждого есть его различные причуды. POSIX, общий знаменатель (и самая близкая вещь к стандарту через Нельды) не указывает такую опцию для grep.

Как упомянуто в других ответах, реализации GNU grep имеет нестандартную опцию, которая делает то, что Вы хотите. В то время как эта конкретная реализация могла бы быть распространена в системах Linux, Вы не можете принять его доступность ни на каком Unix, даже некоторые системы Linux.

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

В Вашем случае, проверяя файловую систему и соответствуя regexp в потоке две отдельных задачи. Только нормально рассматривать каждого в отдельной программе.

0
27.01.2020, 20:00

есть ли какая-либо единственная, встроенная команда, которая работает через это волшебство...?

Чтобы быть педантичными, нет, Вы не можете предположить, что такая команда существует.

Существует много различных реализаций Unix, и у каждого есть его различные причуды. POSIX, общий знаменатель (и самая близкая вещь к стандарту через Нельды) не указывает такую опцию для grep.

Как упомянуто в других ответах, реализации GNU grep имеет нестандартную опцию, которая делает то, что Вы хотите. В то время как эта конкретная реализация могла бы быть распространена в системах Linux, Вы не можете принять его доступность ни на каком Unix, даже некоторые системы Linux.

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

В Вашем случае, проверяя файловую систему и соответствуя regexp в потоке две отдельных задачи. Только нормально рассматривать каждого в отдельной программе.

0
27.01.2020, 20:00

Чтобы найти строку из заданного каталога, используйте команду ниже

find <fullDirectoryPath> -name '*' -exec grep -l '<StringToFind>' {} \;

Например:

find /apps_bev/apps/xfer/export/02210 -name '*' -exec grep -l '38221000001032' {} \;
1
20.08.2021, 13:37

Теги

Похожие вопросы