Как я могу сделать рекурсивный grep на Solaris?
Когда я попытался, я получил эту ошибку:
-r: invalid option.
Как я могу сделать рекурсивный grep на Solaris?
Когда я попытался, я получил эту ошибку:
-r: invalid option.
Рекурсивный grep на Solaris:
find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
find . | xargs grep whatsyrexpression
или используйте cpan
для установки команды ack
.
Опция -r для grep работает только с GNU grep. Решения с xargs хороши, но вызывают некоторые проблемы - найти | xargs grep будет ломать имена файлов с пробелами, и кроме того - xargs также является инструментом gnu, поэтому он может быть не установлен.
Насколько я знаю, правильный способ сделать это на солярисе:
find . -type f -exec grep ... {} +
Кроме того, обратите внимание, что у Solaris (ну, unix) grep нет (например) опции -E, и вы должны использовать egrep
для нее.
Если вам повезет, у вас также установлен gnu grep. Затем он будет назван " ggrep ".
ggrep обычно находится в /usr/sfw/bin/ggrep
если он установлен.
Используйте флаги -H -R -I
: -H
для отображения имени файла, -R
для рекурсивного поиска, -I
для игнорирования двоичных файлов.
Пример: Показать все строки во всех файлах, кроме двоичных, из этого каталога, включая все подкаталоги со словом "excel"
/usr/sfw/bin/ggrep -H -R -I "excel" *
find . -type f -exec grep hello {} /dev/null \;
Это также будет работать для имен файлов с пробелами. Почему /dev /null? Потому что каждый экземпляр grep будет проверять один файл за раз и поэтому не печатает имя файла, если найдет совпадение. Это хорошо, если вы действительно выполняете поиск только одного файла, но это не поможет, если grep вызывается из find. Дополнительный /dev /null служит дополнительным фиктивным файлом для поиска, так что grep будет предшествовать текущему имени файла при печати совпадающей строки.