Рекурсивный поиск не работает для grep на солярисе


20

На нашем сервере Solaris я обнаружил, что grep -rэто не работает, и это обычный способ, которым я пользуюсь grep. Кажется, что egrepимеет такое же поведение.

Учитывая, что у меня нет контроля над машиной, есть ли способ grepвыполнить рекурсивный поиск? Или мне нужно передать вывод findв grep?


1
Какой выпуск Solaris вы используете?
Jlliagre

Ответы:


4

Я не знаком с Solaris, но если вы переходите с GNU / linux на Solaris, вы обнаружите, что большинство команд будут немного отличаться. GNU-версия инструментов Unix имеет дополнительные функции, отсутствующие в "проприетарных" Unixes.

Вы можете скачать GNU grep (s) здесь, затем скомпилировать и установить.

Если у вас есть root-доступ, вы можете запустить configure --prefix = / usr / local, чтобы утилиты устанавливались в / usr / local

Если у вас нет доступа с правами root, вы можете запустить configure --prefix = $ {HOME}, чтобы утилиты устанавливались в ваш домашний каталог.


--prefix=${HOME}}/.localвероятно, более целесообразно ... не нужно загромождать домашний каталог shareи libпапки
jpaugh

1
Беспорядок одного человека - организованный другой человек
bsd

Несомненно! Честно говоря, я защищаю от выходного дня, когда я говорю: « shareЭто должен быть мусорный каталог!» rm -rfDoh!
jpaugh

31

Если вы хотите использовать find, это будет самый быстрый способ:

find . -type f -exec grep pattern {} +

Однако Gnu grep, скорее всего, уже установлен на вашем компьютере.

Это часть установки по умолчанию на Solaris 11 in /usr/gnu/bin/grep. То же самое для Solaris 10, где вы найдете его /usr/sfw/bin/ggrep. В старых выпусках он мог быть установлен из sunfreeware или других репозиториев, проверить /usr/local/bin/grepи /opt/csw/bin/grepдля общих мест.


Вы также можете использовать -nameопцию с find.
Sleyweasel

@sleepyweasel -nameне будет искать внутри файлов, а будет только искать имена файлов, что не то, что запрашивает OP.
jlliagre

6

Вместо этого используйте ggrep, если он установлен.

Например, найдите «mysearchstring» из текущего каталога во всех подкаталогах ( -R), покажите имя файла и путь для match ( -H) и игнорируйте двоичные файлы ( -I). Не забывайте в *конце команды.

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrep находится в. /usr/sfw/bin Вы можете добавить его в свой профиль с помощью команды EXPORT, чтобы вы могли вызывать его из командной строки напрямую.

PATH=$PATH:/usr/sfw/bin
export PATH

Версия Solaris: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise


1
По крайней мере, в моей системе ggrepдействительно GNU grep. Благодарность!
jpaugh

3

Загрузите автономный ackскрипт на Perl с http://betterthangrep.com/ , вставьте его в свой $HOME/binи научитесь использовать его вместо этого. Я считаю, что это, как рекламируется, лучше, чем grep, для многих применений в моей повседневной работе по разработке.


3

У соляриса grep нет -rварианта.

Вы можете использовать следующую команду.

find . -type f | xargs grep 'sometext'

2
Вам не нужно «контролировать систему», чтобы скомпилировать GNU grep и установить его где-нибудь в вашем домашнем каталоге.
Кит Томпсон

@KeithThompson спасибо, чтобы указать на это. Я исправил свой ответ.
Сачин Дивекарь

Это очень полезно, чтобы найти все файлы, соответствующие шаблону имени, и показать результаты вместе с файлом. напр. find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse

1

Да, вам понадобится GNU grep. Лично я не пропустите «-r» флаг , потому что вы можете сделать то же самое с комбинацией findи , grepно это напоминает , что наличие инструментов GNU доступны на коробке Solaris является то , что я хотел бы рассмотреть наилучшую практику. Итак, поехали:

Я бы не стал загружать исходный код из разных мест в Интернете, а затем создавать себя. Это не обязательно. Если вы просто хотите, чтобы в Solaris были доступны стандартные инструменты GNU, выполните следующие действия:

Если вы используете Solaris 10, вы должны получить Solaris 10 Companion Disk. Раньше она распространялась Sun, но сейчас она живет здесь . Лично я бы сделал привычкой всегда устанавливать содержимое этого диска или, по крайней мере, самые важные части GNU. Сделайте это частью вашего JumpStart (или что вы используете) для новых серверов в вашей организации!

Если вы находитесь на Solaris 11, жизнь намного проще. Инструменты GNU обычно устанавливаются по умолчанию, но не все они распространяются в локальные зоны. IFS, система упаковки в Solaris 11, делает вашу жизнь намного проще, поэтому вам действительно стоит перейти на Solaris 11 (и по многим другим причинам). Вот список пакетов, которые вы должны всегда иметь в наличии для любой зоны:

упак: // Солярис / архиватор / гну-тар
упак: // Солярис / разработчик / гну-Binutils
упак: // Солярис / диагностики / топ
упак: // Солярис / файл / гну-Coreutils
упак: // Солярис / файл / гну-Findutils
упак: // Солярис / текст / простак
упак: // Солярис / текст / гну-Diffutils
упак: // Солярис / текст / гну-Grep
упак: // Солярис / текст / гну-СЭД

и если вы используете хост для целей разработки / сборки, вы можете добавить:

упак: // Солярис / разработчик / сборки / гну-макияж
упак: // Солярис / разработчик / сборки / макияж
упак: // Солярис / разработчик / НКУ-45
упак: // Солярис / система / заголовок
упак: // Солярис / разработчик / сборки / Autoconf
упак: // Солярис / разработчик / сборки / Automake-110

Лично я бы включил вышеописанное (возможно, меньше инструментов разработчика) в стандартную установку моей компании для новых серверов / зон. Системные администраторы Solaris часто настаивают на том, чтобы отличаться от мира Linux, но в этом нет необходимости. Просто сделайте это и сделайте это частью вашей установки по умолчанию. Вы не пожалеете об этом.


Я не уверен, что вы читали ту часть, где я сказал «учитывая, что я не контролирую машину ...», я уверен, что это полезная информация для кого-то, но вряд ли это ответ на вопрос, который я задал ,
Эрик Уилсон

Это информация для вашего системного администратора. ИМХО он дал вам покалеченную машину. Эти вещи должны быть установлены по умолчанию. Но да, вы правы, информация, возможно, была в той же степени предназначена для тех, кто приезжает в это место и читает ваш вопрос. Сегодня вам не хватает GNU grep, завтра вам не хватает GNU tar и т. Д. Вы просто еще этого не знаете. :-)
Петер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.