Yinelemeli arama solaris üzerinde grep için çalışmıyor


20

Solaris sunucumuzda grep -rbunun işe yaramadığını görüyorum, bu benim kullandığım genel yöntem grep. Görünüşe göre egrepaynı davranış.

Makine üzerinde hiçbir kontrole sahip olmadığım göz önüne alındığında, grepözyinelemeli arama yapmanın bir yolu var mı? Yoksa borusuna çıktısını gerekiyor findiçine grep?


1
Hangi Solaris sürümünü kullanıyorsunuz?
jlliagre

Yanıtlar:


4

Solaris'e aşina değilim, ancak GNU / linux'dan Solaris'e geçiyorsanız, komutların çoğunun biraz farklı davranacağını göreceksiniz. Unix araçlarının GNU sürümü, "tescilli" Unix'lerde eksik ek özelliklere sahiptir.

GNU grep (ler) i buradan indirip derleyip kurabilirsiniz.

Kök erişiminiz varsa config --prefix = / usr / local komutunu çalıştırmak isteyebilirsiniz. Yardımcı programlar / usr / local dizinine yüklenir

Kök erişiminiz yoksa, config --prefix = $ {HOME} 'ı çalıştırmak isteyebilirsiniz. Yardımcı programlar ana dizininize yüklenir


--prefix=${HOME}}/.localmuhtemelen daha tavsiye edilir ... ve ana dizin shareve libklasörleri karıştırmaya gerek yok
jpaugh

1
Bir adamın dağınıklığı başka bir adamın örgütlü
bsd

Şüphesiz! Dürüst olmak gerekirse, " share? Bu bir önemsiz dizin olmalı!" rm -rfDoh!
jpaugh

31

Kullanmak istiyorsanız find, bu en hızlı yol olacaktır:

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

Ancak, Gnu grep'in makinenize zaten kurulmuş olması muhtemeldir.

Solaris 11 in'deki varsayılan kurulumun bir parçasıdır /usr/gnu/bin/grep. Solaris 10 ile aynı yerde /usr/sfw/bin/ggrep. Eski sürümlerde, sunfreeware veya diğer depolardan, kontrol /usr/local/bin/grepve /opt/csw/bin/greportak konumlar için yüklenmiş olabilir .


İle -nameseçeneği de kullanabilirsiniz find.
17'de

@sleepyweasel -namedosyaların içinde arama yapmaz , yalnızca OP'nin istediği dosya adlarını arar.
jlliagre

6

Kullanım ggrep yüklü olduğu takdirde yerine.

Örneğin, geçerli dizinden tüm alt dizinlere ( -R) kadar "mysearchstring" ifadesini arayın ve eşleşmeler ( -H) için dosya adını ve yolunu gösterin ve ikili dosyaları ( -I) yok sayın . *Komutun sonundaki unutma .

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

ggrep konumunda yer alır /usr/sfw/bin EXPORT komutuyla profilinize ekleyebilirsiniz, böylece doğrudan komut satırından arayabilirsiniz.

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

Solaris sürümü: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise


1
En azından benim sistemimde, ggrepaslında GNU grep. Teşekkürler!
jpaugh

3

Http://betterthangrep.com/ adresinden bağımsız ackperl komut dosyasını indirin , içine koyun ve bunun yerine kullanmayı öğrenin. Reklamı yaptığım gibi, günlük gelişim çalışmamdaki birçok kullanım için grep'ten daha iyi olduğunu düşünüyorum.$HOME/bin


3

Solaris grep'in -rseçeneği yok.

Aşağıdaki komutu kullanabilirsiniz.

find . -type f | xargs grep 'sometext'

2
GNU grep'i derlemek ve ana dizininizin altına bir yere kurmak için "sistem kontrolü" ne gerek yoktur.
Keith Thompson

@KeithThompson işaret ettiğin için teşekkürler. Cevabımı düzelttim.
Sachin Divekar

Bu, bir ad modeliyle eşleşen tüm dosyaları bulmak ve sonuçları dosyayla göstermek için çok kullanışlıdır. örneğin find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse

1

Evet, GNU grep'e ihtiyacınız olacak. Şahsen ben "-r" bayrağını kaçırmayın çünkü aynı şeyi bir kombinasyonla da yapabilirsiniz findve grepbu da Solaris kutunuzda GNU araçlarına sahip olmanın en iyi uygulamayı düşündüğüm şey olduğunu hatırlatır. İşte başlıyoruz:

İnternetteki çeşitli yerlerden kaynak kod indirip sonra kendiniz inşa etmeye devam etmem. Bu gerekli değil. Solaris'inizin tipik GNU araçlarına sahip olmasını istiyorsanız, aşağıdakileri yapın:

Eğer biri Solaris 10 Solaris 10 Companion Disk almalısınız. Bu eskiden Sun tarafından dağıtıldı ama şimdi burada yaşıyor . Şahsen bu diskin içeriğini veya en azından en önemli GNU parçalarını yüklemeyi alışkanlık haline getirdim. Kuruluşunuzdaki yeni sunucular için JumpStart'ınızın (veya kullandığınız her şeyin) bir parçası olun!

Eğer biri Solaris 11 hayat daha kolaydır. GNU araçları genellikle varsayılan olarak kurulur, ancak bunların tümü yerel bölgelere yayılmaz. Solaris 11'in paketleme sistemi IFS, hayatınızı çok daha kolay hale getirir, bu nedenle gerçekten Solaris 11'e (başka birçok nedenden de) geçmelisiniz. Herhangi bir bölge için her zaman hazır bulundurmanız gereken paketlerin listesi şunlardır:

pk: // Solaris / arşiv / gnu-tar
pk: // Solaris / geliştirici / gnu-Binutils
pk: // Solaris / teşhis / üst
pk: // Solaris / dosya / gnu-coreutils
pk: // Solaris / dosya / gnu-findutils
pk: // Solaris / metin / gawk
pk: // Solaris / metin / gnu-diffutils
pk: // Solaris / metin / gnu-grep
pk: // Solaris / metin gnu-sed /

ve ana makineyi geliştirme / oluşturma amacıyla kullanıyorsanız şunları eklemek isteyebilirsiniz:

pk: // Solaris / geliştirici / build / gnu-make
pk: // Solaris / geliştirici / build / marka
pk: // Solaris / geliştirici / gcc-45
pk: // Solaris / sistem / başlık
pk: // Solaris / geliştirici / build / autoconf
pk: // Solaris / geliştirici / build / automake-110

Şahsen yukarıdaki (muhtemelen daha az dev araçları) şirketimin yeni sunucular / bölgeler için varsayılan yükleme bir parçası yapmak. Solaris sistem yöneticileri genellikle Linux dünyasından farklı olmakta ısrar ederler, ancak buna gerçekten gerek yoktur. Sadece yapın ve varsayılan kurulumunuzun bir parçası olun. Pişman olmayacaksınız.


'Makine üzerinde hiçbir kontrole sahip olmadığım göz önüne alındığında' dediğim kısmı okuduğunuzdan emin değilim. Eminim bu birileri için yararlı bilgilerdir, ama sorduğum sorunun cevabı pek de zor değil .
Eric Wilson

Sistem yöneticiniz için bilgi. Size sakat bir makine IMHO verdi. Bunlar varsayılan olarak kurulmalıdır. Ama evet, haklısın, bilgi belki de bu yere gelen ve sorunuzu okuyan diğerleri için tasarlandı. Bugün GNU grep'i kaçırıyorsunuz, yarın GNU katranını vb. Kaçırıyorsunuz. Henüz bilmiyorsunuz. :-)
peterh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.