Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Рекурсивный поиск grep  (Прочитано 7593 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Рекурсивный поиск grep
« : 26 Августа 2010, 10:15:36 »
Пример: в исходниках ядра найти в каком Makefile встречается переменная. Захожу в /usr/src/ ... и ищу:
grep -r CONFIG_I2C_PIIX4 *MakefileНичего. Ищу шире:
grep -r CONFIG_I2C_PIIX4 *долго тарахтит жестким диском и вываливает большой список всякого разного среди которого нахожу и то, что искал:
Цитировать
drivers/i2c/busses/Makefile:obj-$(CONFIG_I2C_PIIX4)             += i2c-piix4.o

Как же при рекурсивном поиске правильно задавать маску?

Оффлайн Пророк

  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #1 : 26 Августа 2010, 10:25:57 »
Так, что бы с маской совпадали все папки, в которых лежит искомый обьект.

Либо исползовать find -name '*filemask*' -exec grep pattern {} \;

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #2 : 26 Августа 2010, 10:29:06 »
Лучше всего сделать двуступенчато с использованием трубы.
Вначале либо find либо locate найти требуемые файлы,
а затем в найденных искать что нужно с помощью grep.
ЗЫ. Можно использовать find с опцией -exec.
« Последнее редактирование: 26 Августа 2010, 10:38:27 от alexander.pronin »

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #3 : 26 Августа 2010, 11:19:01 »
Спасибо, получилось. C find работает заметно быстрее.
Но все-таки странно, под маску "*Makefile" должны подходить все нижележащие поддиректории. Чего же grep выкабенивается?

Оффлайн Guranvir

  • Участник
  • *
  • Сообщений: 195
    • Просмотр профиля
    • Блог начинающего линуксоида
Re: Рекурсивный поиск grep
« Ответ #4 : 26 Августа 2010, 11:38:17 »
А если так маску изменить: "*makefile*"

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #5 : 26 Августа 2010, 12:12:34 »
Да я по всякому пробовал. Рекурсивно кроме * никакие маски вообще не работают.

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #6 : 26 Августа 2010, 12:53:43 »
-e это про регулярные выражения в искомой строке, а у меня не получалось искать по маске в файлах.

Оффлайн dieselist

  • Активист
  • *
  • Сообщений: 525
    • Просмотр профиля
    • diesel.pp.ua
Re: Рекурсивный поиск grep
« Ответ #7 : 26 Августа 2010, 13:47:34 »
(Нажмите, чтобы показать/скрыть)

понял свою ошибку? :)
Фактически, своей первой командой ты искал искомую строку в файлах типа моих - "alsa-driver.tar.bz2Makefile", "linux-headers-2.6.24-16Makefile" и т.д.
Хочешь искать на определнном уровне вложенности можешь делать как-то так grep -r CONFIG_I2C_PIIX4 */*/Makefile, хотя find-ом в этом случае пользоваться все-таки правильнее :)
Ubuntu, Gentoo, RHEL, AIX

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #8 : 26 Августа 2010, 14:08:05 »
grep -r --include=Makefile CONFIG_I2C_PIIX4 *

Оффлайн 0xEEd

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #9 : 26 Августа 2010, 23:00:20 »
 :) Очень всем благодарен . Какая однако неоднозначная команда, столько разновидностей и вариантов.

Mam(O)n, С "--include" по смыслу получается что в последнем параметре нет необходимости и он даже противоречит опции. Но работает!

dieselist, оппа. . рехнуться можно. Всю свою сознательную жизнь я считал, что звездочка (*) - это любое количество любых символов, и вдруг такое  :o  Да, так конечно неудобно, потому что уровень вложенности заранее неизвестен, а указывать его нужно точно.

Оффлайн dieselist

  • Активист
  • *
  • Сообщений: 525
    • Просмотр профиля
    • diesel.pp.ua
Re: Рекурсивный поиск grep
« Ответ #10 : 26 Августа 2010, 23:06:14 »
dieselist, оппа. . рехнуться можно. Всю свою сознательную жизнь я считал, что звездочка (*) - это любое количество любых символов, и вдруг такое  :o  Да, так конечно неудобно, потому что уровень вложенности заранее неизвестен, а указывать его нужно точно.

Хе-хе :) Не путай грешное с праведным. Звездочку раскрывает коммандная оболочка, в твоем случае вероятно bash. Т.е. bash раскрывает звездочу и подставляет в комманду уже имена файлов\директорий. Я тебе чтоб прояснить этот момент и показал пример с echo.

http://tldp.org/LDP/abs/html/
покури по настроению. там все это описано.
Ubuntu, Gentoo, RHEL, AIX

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Рекурсивный поиск grep
« Ответ #11 : 27 Августа 2010, 01:32:08 »
Mam(O)n, С "--include" по смыслу получается что в последнем параметре нет необходимости и он даже противоречит опции. Но работает!
Последний параметр как раз задаёт глобальную маску (включая полный путь). Это обязательный параметр. А вот потом из всего этого отбираются файлы конкретно по имени (отбрасывая часть пути), с помощью include.

 

Страница сгенерирована за 0.016 секунд. Запросов: 20.