3

Как я могу сделать рекурсивный grep на Solaris?

Когда я попытался, я получил эту ошибку:

-r: invalid option.

5 ответов5

7

Рекурсивный grep на Solaris:

find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
2

find . | xargs grep whatsyrexpression или используйте cpan для установки команды ack .

1

Опция -r для grep работает только с GNU grep. Решения с xargs хороши, но вызывают некоторые проблемы - найти | xargs grep будет ломать имена файлов с пробелами, и кроме того - xargs также является инструментом gnu, поэтому он может быть не установлен.

Насколько я знаю, правильный способ сделать это на солярисе:

find . -type f -exec grep ... {} +
  • в конце означает, что для каждого вызова grep будет передано много файлов, поэтому он будет относительно быстрым.

Кроме того, обратите внимание, что у Solaris (ну, unix) grep нет (например) опции -E, и вы должны использовать egrep для нее.

1

Если вам повезет, у вас также установлен gnu grep. Затем он будет назван " ggrep ".

ggrep обычно находится в /usr/sfw/bin/ggrep если он установлен. Используйте флаги -H -R -I : -H для отображения имени файла, -R для рекурсивного поиска, -I для игнорирования двоичных файлов.

Пример: Показать все строки во всех файлах, кроме двоичных, из этого каталога, включая все подкаталоги со словом "excel"

/usr/sfw/bin/ggrep -H -R -I "excel" *
0
find . -type f -exec grep hello {} /dev/null \;

Это также будет работать для имен файлов с пробелами. Почему /dev /null? Потому что каждый экземпляр grep будет проверять один файл за раз и поэтому не печатает имя файла, если найдет совпадение. Это хорошо, если вы действительно выполняете поиск только одного файла, но это не поможет, если grep вызывается из find. Дополнительный /dev /null служит дополнительным фиктивным файлом для поиска, так что grep будет предшествовать текущему имени файла при печати совпадающей строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .