Wyszukiwanie rekurencyjne nie działa dla grep na solaris


20

Na naszym serwerze Solaris stwierdzam, że grep -rto nie działa, co jest zwykłym sposobem, którego używam grep. Wygląda na to, że egrepma takie samo zachowanie.

Biorąc pod uwagę, że nie mam kontroli nad maszyną, czy istnieje sposób na grepprzeprowadzenie wyszukiwania rekurencyjnego? A może muszę przesłać dane wyjściowefind do grep?


1
Jakiej wersji Solaris używasz?
jlliagre

Odpowiedzi:


4

Nie znam Solaris, ale jeśli przejdziesz z GNU / Linux na Solaris, zauważysz, że większość poleceń będzie się nieco różnić. W wersjach GNU narzędzi uniksowych brakuje unikatowych funkcji w „zastrzeżonych” uniksach.

Możesz pobrać GNU grep (s) tutaj, a następnie skompilować i zainstalować.

Jeśli masz dostęp do konta root, możesz chcieć uruchomić config --prefix = / usr / local Tak, aby narzędzia instalowały się w / usr / local

Jeśli nie masz dostępu do konta root, możesz uruchomić config --prefix = $ {HOME} Tak, aby narzędzia instalowały się w twoim katalogu domowym


--prefix=${HOME}}/.localjest prawdopodobnie bardziej wskazane ... nie trzeba zaśmiecać katalogu domowego sharei libfolderów
jpaugh

1
Jeden człowiek jest zagracony, to inny człowiek jest zorganizowany
bsd

Bez wątpienia! Szczerze mówiąc, chronię przed dniem wolnym, kiedy mówię: „ share? To musi być katalog śmieci!” rm -rfDoh!
jpaugh

31

Jeśli chcesz użyć find, byłby to najszybszy sposób:

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

Jednak Gnu grep jest już prawdopodobnie zainstalowany na twoim komputerze.

Jest to część domyślnej instalacji w systemie Solaris 11 w /usr/gnu/bin/grep. To samo dotyczy Solaris 10, w którym go znajdziesz /usr/sfw/bin/ggrep. W starszych wersjach program mógł zostać zainstalowany z oprogramowania SunFreeware lub innych repozytoriów, sprawdź /usr/local/bin/grepi znajdź /opt/csw/bin/greptypowe lokalizacje.


Możesz również skorzystać z -nameopcji za pomocą find.
sleepyweasel

@sleepyweasel -namenie będzie przeszukiwał plików, lecz będzie wyszukiwał tylko nazwy plików, o które nie prosi OP.
jlliagre

6

Zamiast tego użyj ggrep, jeśli jest zainstalowany.

Np. Wyszukaj „mysearchstring” z bieżącego katalogu do wszystkich podkatalogów ( -R) i pokaż nazwę pliku i ścieżkę do match ( -H) oraz zignoruj ​​pliki binarne ( -I). Nie zapomnij *o końcu polecenia.

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

ggrep znajduje się w. /usr/sfw/bin Możesz dodać go do swojego profilu za pomocą polecenia EXPORT, aby móc wywoływać go bezpośrednio z wiersza poleceń.

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

Wersja Solaris: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise


1
Przynajmniej w moim systemie ggrepjest rzeczywiście GNU grep. Dzięki!
jpaugh

3

Pobierz samodzielny ackskrypt perla ze strony http://betterthangrep.com/ , włóż go do swojego $HOME/bini naucz się go używać. Uważam, że jest to, jak reklamowano, lepsze niż grep do wielu zastosowań w mojej codziennej pracy programistycznej.


3

Solaris grep nie ma -ropcji.

Możesz użyć następującego polecenia.

find . -type f | xargs grep 'sometext'

2
Nie potrzebujesz „kontroli nad systemem”, aby skompilować GNU grep i zainstalować go gdzieś w twoim katalogu domowym.
Keith Thompson,

@KeithThompson dzięki, aby to podkreślić. Poprawiłem swoją odpowiedź.
Sachin Divekar,

Jest to bardzo przydatne, aby znaleźć wszystkie pliki pasujące do wzorca nazwy i wyświetlić wyniki z plikiem. np. find /opt/ -name "*.sh" -type f | xargs grep "start"
Cofnij

1

Tak, potrzebujesz GNU grep. Osobiście nie tęsknię za flagą „-r”, ponieważ możesz zrobić to samo z kombinacją findi, grepale to przypomina, że ​​posiadanie narzędzi GNU dostępnych na twoim komputerze Solaris uważam za najlepszą praktykę. Więc zaczynamy:

Nie chciałbym pobierać kodu źródłowego z różnych miejsc w Internecie, a następnie budować siebie. To nie jest konieczne. Jeśli chcesz, aby Twój Solaris miał dostępne typowe narzędzia GNU, wykonaj następujące czynności:

Jeśli korzystasz z systemu Solaris 10 , powinieneś zdobyć Dysk towarzyszący Solaris 10. Kiedyś była dystrybuowana przez Sun, ale teraz tu mieszka . Osobiście postanowiłbym zawsze instalować zawartość tego dysku lub przynajmniej najważniejszych części GNU. Włącz go do JumpStart (lub cokolwiek, czego używasz) dla nowych serwerów w organizacji!

Jeśli korzystasz z systemu Solaris 11, życie jest znacznie prostsze. Narzędzia GNU są zazwyczaj instalowane domyślnie, ale nie wszystkie z nich są propagowane do stref lokalnych. IFS, system pakowania w systemie Solaris 11, znacznie ułatwia życie, dlatego naprawdę powinieneś przejść na system Solaris 11 (również z wielu innych powodów). Lista pakietów, które należy zawsze mieć na uwadze dla każdej strefy, to:

pkg: // solaris / archiver / gnu-tar
pkg: // solaris / developer / gnu-binutils
pkg: // solaris / diagnostyczny / top
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

a jeśli używasz hosta do celów programowania / kompilacji, możesz chcieć dodać:

pkg: // solaris / developer / build / gnu-make
pkg: // solaris / developer / build / make
pkg: // solaris / developer / gcc-45
pkg: // solaris / system / header
pkg: // solaris / developer / build / autoconf
pkg: // solaris / developer / build / automake-110

Osobiście uczyniłbym powyższe (potencjalnie mniej narzędzi programistycznych) częścią domyślnej instalacji mojej firmy dla nowych serwerów / stref. Administratorzy systemu Solaris często nalegają na to, by różnić się od świata Linuksa, ale tak naprawdę nie ma takiej potrzeby. Po prostu zrób to i ustaw jako część domyślnej instalacji. Nie pożałujesz.


Nie jestem pewien, czy przeczytałeś fragment, w którym powiedziałem „biorąc pod uwagę, że nie mam kontroli nad maszyną ...” Jestem pewien, że jest to przydatna informacja dla kogoś, ale nie jest to odpowiedź na pytanie, które zadałem .
Eric Wilson

Jest to informacja dla twojego administratora systemu. Dał ci kaleką maszynę IMHO. Te rzeczy powinny być instalowane domyślnie. Ale tak, masz rację, być może informacje były w równym stopniu przeznaczone dla innych osób, które przychodzą do tego miejsca i czytają twoje pytanie. Dziś brakuje GNU grep, jutro będzie brakowało tar GNU itp. Po prostu jeszcze tego nie wiesz. :-)
Peter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.