Рекурсивний пошук не працює на греп на сонелі


20

На нашому сервері Solaris я виявляю, що grep -rце не працює. Це звичайний спосіб, який я використовую grep. Здається, egrepмає таку саму поведінку.

З огляду на те, що я не маю контролю над машиною, чи є спосіб grepздійснити рекурсивний пошук? Або мені потрібно труби вихід findв grep?


1
Який випуск Solaris ви використовуєте?
jlliagre

Відповіді:


4

Я не знайомий з Solaris, але якщо ви переходите з GNU / linux на Solaris, ви знайдете, що більшість команд буде вести себе трохи інакше. Версія GNU інструментів Unix має додаткові функції, відсутні в "власницьких" Unixes.

Ви можете завантажити GNU grep (s) тут, після чого компілювати та встановлювати.

Якщо у вас є кореневий доступ, ви можете запустити configure --prefix = / usr / local Таке, що утиліти встановлюють у / usr / local

Якщо у вас немає кореневого доступу, ви можете запустити налаштування --prefix = $ {HOME} Таке, що утиліти встановлять у домашній каталог


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

1
Один чоловік захаращений, інший організований
bsd

Без сумніву! Чесно кажучи, я захищаю від вихідного дня, коли кажу: " shareЦе має бути каталог небажаного!" rm -rfДо!
jpaugh

31

Якщо ви хочете скористатися find, це був би найшвидший спосіб:

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

Однак Gnu grep, швидше за все, вже встановлений на вашій машині.

Це частина встановлення за замовчуванням на Solaris 11 in /usr/gnu/bin/grep. Те саме для Solaris 10, де ви знаходите його /usr/sfw/bin/ggrep. На старих випусках він може бути встановлений із сонячної програми чи інших сховищ, перевірте, /usr/local/bin/grepчи /opt/csw/bin/grepдля загальних місць розташування.


Ви також можете скористатися -nameопцією за допомогою find.
сонник,

@sleepyweasel -nameне здійснюватиме пошук у файлах, а лише шукатиме імена файлів, а це не те, що вимагає ОП.
jlliagre

6

Замість цього використовуйте ggrep, якщо він встановлений.

Наприклад, шукайте "mysearchstring" з поточного каталогу вниз до всіх підкаталогів ( -R) та показуйте ім'я та шлях файлу для відповідностей ( -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та навчіться його використовувати. Я вважаю, що це, як рекламується, краще, ніж греп для багатьох застосувань у моїй щоденній роботі з розробки.


3

Solaris grep не має -rможливості.

Ви можете використовувати наступну команду.

find . -type f | xargs grep 'sometext'

2
Вам не потрібен "контроль над системою", щоб зібрати GNU grep та встановити його десь під домашнім каталогом.
Кіт Томпсон

@KeithThompson дякує, що вказує на це. Я виправив свою відповідь.
Сахін Дівекар

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

1

Так, вам знадобиться греп GNU. Особисто я не пропустіть «-r» прапор , тому що ви можете зробити те ж саме з комбінацією findі , grepале це нагадує , що наявність інструментів GNU доступні на коробці Solaris є те , що я хотів би розглянути найкращу практику. Отже, ми йдемо:

Я б не збирався завантажувати вихідний код з різних місць в Інтернеті, а потім будувати себе. Це не обов'язково. Якщо ви просто хочете, щоб ваш Solaris мав доступні типові інструменти для GNU, виконайте наступне:

Якщо ви перебуваєте на Solaris 10, вам слід придбати компакт-диск Solaris 10. Раніше це поширювалось Сонцем, але зараз воно живе тут . Особисто я б хотів завжди встановлювати вміст цього диска або принаймні найважливіші частини GNU. Зробіть це частиною вашого JumpStart (або будь-якого іншого, що ви використовуєте) для нових серверів вашої організації!

Якщо ви перебуваєте на Solaris 11, життя набагато простіше. Інструменти GNU зазвичай встановлюються за замовчуванням, але не всі вони поширюються у локальні зони. IFS, система упаковки на Solaris 11, значно полегшує ваше життя, тому ви дійсно повинні переходити до Solaris 11 (також багато інших причин). Список пакетів, які завжди слід вважати доступними для будь-якої зони, є такими:

pkg: // solaris / archiver / gnu-tar
pkg: // solaris / developer / gnu-binutils
pkg: // solaris / діагностика / верх
pkg: // solaris / file / gnu-coreutils
pkg: // solaris / file / gnu-findutils
pkg: // solaris / text / gawk
pkg: // solaris / text / gnu-diffutils
pkg: // solaris / text / gnu-grep
pkg: // solaris / text / gnu-sed

і якщо ви використовуєте хост для розробки / побудови, ви можете додати:

pkg: // solaris / developer / build / gnu-make
pkg: // solaris / developer / build / make
pkg: // solaris / developer / gcc-45
pkg: // solaris / система / заголовок
pkg: // solaris / developer / build / autoconf
pkg: // solaris / developer / build / automake-110

Особисто я би зробив вищезазначені (можливо менше інструментів для розробників) частиною установки за замовчуванням моєї компанії для нових серверів / зон. Систематичні системи Solaris часто наполягають на тому, щоб відрізнятись від світу Linux, але насправді в цьому немає потреби. Просто зробіть це і зробіть його частиною вашої установки за замовчуванням. Ви не пошкодуєте.


Я не впевнений, чи читаєте ви частину, де я сказав: "враховуючи, що я не маю контролю над машиною ..." Я впевнений, що це комусь корисна інформація, але навряд чи це відповідь на запитання, яке я задав .
Ерік Вілсон

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