Рекурсивный grep на Солярисе:
find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
- r опция для grep работает только с гну grep. Решения с xargs хороши, но вызывают некоторые проблемы - находят | xargs grep, повредится на именах файлов с пробелами, и кроме того - xargs является также инструментом гну, таким образом, он не мог бы быть установлен.
Насколько я знаю, надлежащий способ сделать это на solaris:
find . -type f -exec grep ... {} +
Кроме того, обратите внимание, что solaris (хорошо, Unix) grep не имеет (например)-E опции, и необходимо использовать egrep
для него.
Если Вы удачливы, у Вас есть гну 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 повторяющимся образом называют от находки. Дополнительный/dev/null служит дополнительным фиктивным файлом для поиска так, чтобы grep предварительно ожидал текущее имя файла, когда это распечатает согласующий отрезок длинной линии.