Pencarian rekursif tidak bekerja untuk grep pada solaris

20

Di server Solaris kami, saya menemukan itu grep -rtidak berfungsi, yang merupakan cara yang biasa saya gunakan grep. Tampaknya egrepmemiliki perilaku yang sama.

Mengingat saya tidak memiliki kendali atas mesin, apakah ada cara untuk grepmelakukan pencarian rekursif? Atau apakah saya perlu menyalurkan output findke grep?

Eric Wilson
sumber
1
Apa rilis Solaris yang Anda gunakan?
jlliagre

Jawaban:

4

Saya tidak terbiasa dengan Solaris, tetapi jika Anda beralih dari GNU / linux ke Solaris Anda akan menemukan sebagian besar perintah akan berperilaku sedikit berbeda. Versi GNU dari alat Unix memiliki fitur tambahan yang hilang di Unix "eksklusif".

Anda dapat mengunduh grep GNU di sini kemudian kompilasi dan instal.

Jika Anda memiliki akses root, Anda mungkin ingin menjalankan configure --prefix = / usr / local sehingga utilitas menginstal ke / usr / local

Jika Anda tidak memiliki akses root, Anda mungkin ingin menjalankan configure --prefix = $ {HOME} Sedemikian rupa sehingga utilitas menginstal ke direktori home Anda

bsd
sumber
--prefix=${HOME}}/.localmungkin lebih disarankan ... tidak perlu mengacaukan direktori home sharedan libfolder
jpaugh
1
Satu orang berantakan adalah orang lain yang terorganisir
bsd
Tanpa keraguan! Jujur, saya melindungi terhadap hari libur ketika saya berkata, " shareItu harus menjadi direktori sampah!" rm -rfDoh!
jpaugh
31

Jika Anda ingin menggunakan find, ini akan menjadi cara tercepat:

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

Namun, Gnu grep kemungkinan besar sudah terpasang di mesin Anda.

Ini adalah bagian dari instalasi default pada Solaris 11 in /usr/gnu/bin/grep. Sama untuk Solaris 10 tempat Anda menemukannya /usr/sfw/bin/ggrep. Pada rilis yang lebih lama, mungkin telah diinstal dari sunfreeware atau repositori lainnya, periksa /usr/local/bin/grepdan /opt/csw/bin/grepuntuk lokasi umum.

Jlliagre
sumber
Anda juga dapat menggunakan -nameopsi ini find.
sleepyweasel
@sleepyweasel -nametidak akan mencari di dalam file tetapi hanya mencari nama file yang bukan apa yang diminta OP.
jlliagre
6

Gunakan ggrep sebagai gantinya jika sudah diinstal.

Misalnya, Cari "pencarian saya" dari direktori saat ini ke semua subdirektori ( -R), dan perlihatkan nama file dan jalur untuk kecocokan ( -H) dan abaikan file biner ( -I). Jangan lupa *pada akhir perintah.

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

ggrep terletak di /usr/sfw/bin Anda dapat menambahkannya ke profil Anda dengan perintah EKSPOR sehingga Anda dapat memanggilnya dari baris perintah secara langsung.

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

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

Bawah
sumber
1
Setidaknya di sistem saya, ggrepmemang grep GNU. Terima kasih!
jpaugh
3

Unduh ackskrip perl mandiri dari http://betterthangrep.com/ , masukkan ke dalam Anda $HOME/bin, dan belajarlah untuk menggunakannya. Saya menemukan ini, seperti yang diiklankan, lebih baik daripada grep untuk banyak kegunaan dalam pekerjaan pengembangan harian saya.

alanc
sumber
3

Solaris grep tidak memiliki -ropsi.

Anda dapat menggunakan perintah berikut.

find . -type f | xargs grep 'sometext'
Sachin Divekar
sumber
2
Anda tidak perlu "mengontrol sistem" untuk mengkompilasi GNU grep dan menginstalnya di suatu tempat di bawah direktori home Anda.
Keith Thompson
@KeithThompson terima kasih untuk menunjukkannya. Saya telah mengoreksi jawaban saya.
Sachin Divekar
Ini sangat berguna untuk menemukan semua file yang cocok dengan pola nama dan menunjukkan hasil dengan file tersebut. misalnya find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse
1

Ya, Anda membutuhkan grep GNU. Secara pribadi saya tidak ketinggalan bendera "-r" karena Anda dapat melakukan hal yang sama dengan kombinasi finddan, greptetapi ini mengingatkan bahwa memiliki alat GNU yang tersedia di kotak Solaris Anda adalah apa yang saya anggap praktik terbaik. Jadi di sini kita mulai:

Saya tidak akan mengunduh kode sumber dari berbagai tempat di Internet dan kemudian membangun diri Anda sendiri. Itu tidak perlu. Jika Anda hanya ingin Solaris Anda memiliki alat-alat GNU khas yang tersedia maka lakukan sebagai berikut:

Jika Anda menggunakan Solaris 10, Anda harus mendapatkan Solaris 10 Companion Disk. Ini dulunya didistribusikan oleh Sun tetapi sekarang tinggal di sini . Secara pribadi saya akan selalu terbiasa menginstal isi disk ini atau setidaknya bagian-bagian GNU yang paling penting. Jadikan itu bagian dari JumpStart Anda (atau apa pun yang Anda gunakan) untuk server baru di organisasi Anda!

Jika Anda menggunakan Solaris 11, hidup jauh lebih sederhana. Alat-alat GNU biasanya diinstal secara default tetapi tidak semuanya disebarkan ke zona lokal. IFS, sistem pengemasan pada Solaris 11, membuat hidup Anda jauh lebih mudah sehingga Anda benar-benar harus pindah ke Solaris 11 (banyak alasan lain juga). Daftar paket yang harus Anda pertimbangkan selalu tersedia untuk zona apa pun adalah sebagai berikut:

pkg: // solaris / archiver / gnu-tar
pkg: // solaris / developer / gnu-binutils
pkg: // solaris / diagnostik / 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 / teks / gnu-sed

dan jika Anda menggunakan host untuk tujuan pengembangan / pembangunan, Anda mungkin ingin menambahkan:

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

Secara pribadi saya akan membuat bagian di atas (berpotensi lebih sedikit alat dev) instalasi default perusahaan saya untuk server / zona baru. Sysadmin Solaris sering bersikeras berbeda dari dunia Linux tetapi sebenarnya tidak perlu. Lakukan saja dan jadikan itu bagian dari pemasangan default Anda. Anda tidak akan menyesalinya.

peterh
sumber
Saya tidak yakin jika Anda membaca bagian di mana saya berkata 'mengingat bahwa saya tidak memiliki kendali atas mesin ...' Saya yakin ini adalah informasi yang berguna bagi seseorang, tetapi ini bukan jawaban untuk pertanyaan yang saya tanyakan. .
Eric Wilson
Ini adalah informasi untuk sysadmin Anda. Dia telah memberi Anda mesin IMHO yang lumpuh. Hal-hal ini harus diinstal secara default. Tapi ya, Anda benar, informasi itu mungkin sama ditujukan untuk orang lain yang datang ke tempat ini dan membaca pertanyaan Anda. Hari ini Anda kehilangan GNU grep, besok Anda akan kehilangan GNU tar, dll. Anda belum mengetahuinya. :-)
peterh