Căutarea recursivă nu funcționează pentru grep pe solaris (Unix, Grep, Solaris, Recursiv)

Eric Wilson a intrebat.

Pe serverul nostru Solaris am constatat că grep -r nu funcționează, care este modul obișnuit în care folosesc grep. Se pare că egrep are același comportament.

Având în vedere că nu am niciun control asupra mașinii, există o modalitate de a avea grep să efectueze o căutare recursivă? Sau trebuie să conduc ieșirea din find în grep?

Comentarii

  • Ce versiune Solaris utilizați? –  > Por jlliagre.
6 răspunsuri
bsd

Nu sunt familiarizat cu Solaris, dar dacă treceți de la GNU/linux la Solaris veți constata că majoritatea comenzilor se vor comporta ușor diferit. Versiunea GNU a uneltelor Unix are caracteristici suplimentare care lipsesc în Unix-urile „proprietare”.

Puteți descărca GNU grep(s) aici apoi compilați și instalați.

Dacă aveți acces root, ați putea dori să rulațiconfigure –prefix=/usr/local astfel încât utilitățile să se instaleze în /usr/local

Dacă nu aveți acces de root, puteți rulaconfigure –prefix=${HOME}De așa manieră încât utilitarele să se instaleze în directorul dvs. personal.

Comentarii

  • --prefix=${HOME}}/.local este probabil mai recomandabil… nu este nevoie să aglomerați directorul de domiciliu cu share și lib foldere –  > Por jpaugh.
  • Dezordinea unui om este organizată pentru altcineva –  > Por bsd.
  • Fără îndoială! Sincer, mă protejez împotriva zilei libere când spun: „share? Ăsta trebuie să fie un director de vechituri!” rm -rf Doh! –  > Por jpaugh.
jlliagre

Dacă doriți să utilizați find, , aceasta ar fi cea mai rapidă cale:

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

Cu toate acestea, este foarte probabil ca Gnu grep să fie deja instalat pe calculatorul dumneavoastră.

Acesta face parte din instalarea implicită pe Solaris 11 în /usr/gnu/bin/grep.la fel pentru Solaris 10, unde îl găsiți în /usr/sfw/bin/ggrep.pe versiunile mai vechi, este posibil să fi fost instalat din sunfreeware sau din alte depozite, verificați /usr/local/bin/grep și /opt/csw/bin/grep pentru locațiile comune.

Comentarii

  • De asemenea, ați putea utiliza -name cu opțiunea find. –  > Por sleepyweasel.
  • @sleepyweasel -name nu va căuta în interiorul fișierelor, ci doar în numele fișierelor, ceea ce nu este ceea ce solicită OP. –  > Por jlliagre.
  • Acest lucru nu arată numele fișierului, atunci când este căutat datorită modului în care funcționează grep. Știți cum să faceți ca grep să arate NUMAI numele fișierului atunci când găsește un model în el? Sunt pe Solaris 11.3, dacă are importanță. –  > Por a_girl.
  • @a_girl Puteți clarifica problema cu care vă confruntați? Cu excepția cazului în care există un singur fișier în directorul curent, grep nu afișează numele fișierelor în care găsește modelul în el. –  > Por jlliagre.
Underverse

Utilizați ggrep în locul acestuia, dacă este instalat.

De exemplu, căutați „mysearchstring” din directorul curent până la toate subdirectoarele (-R), și afișează numele fișierului și calea de acces în cazul în care există corespondențe (-H) și ignoră fișierele binare (-I). Nu uitați de opțiunea * de la sfârșitul comenzii.

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

ggrep se află în /usr/sfw/binO puteți adăuga la profilul dvs. cu o comandă EXPORT, astfel încât să o puteți apela direct din linia de comandă.

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

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

Comentarii

  • Cel puțin pe sistemul meu, ggrep este într-adevăr GNU grep. Vă mulțumim! –  > Por jpaugh.
alanc

Descărcați versiunea standalone ack script perl de la http://betterthangrep.com/, , puneți-l în fișierul dvs. $HOME/bin, , și învățați să îl folosiți în locul lui. Am constatat că este, așa cum se anunță, mai bun decât grep pentru multe utilizări în munca mea zilnică de dezvoltare.

Sachin Divekar

Solaris grep nu are -r opțiune.

Puteți utiliza următoarea comandă.

find . -type f | xargs grep 'sometext'

Comentarii

  • Nu aveți nevoie de „control asupra sistemului” pentru a compila GNU grep și a-l instala undeva sub directorul dvs. personal. –  > Por Keith Thompson.
  • @KeithThompson mulțumim că ați semnalat acest lucru. Am corectat răspunsul meu. –  > Por Sachin Divekar.
  • Acest lucru este foarte util pentru a găsi toate fișierele care se potrivesc cu un model de nume și pentru a afișa rezultatele cu fișierul. de ex. find /opt/ -name "*.sh" -type f | xargs grep "start" –  > Por Underverse.
peterh

Da, veți avea nevoie de GNU grep. Personal, nu îmi lipsește indicatorul „-r”, deoarece puteți face același lucru cu o combinație de find și grep dar acest lucru amintește că a avea instrumentele GNU disponibile pe caseta Solaris este ceea ce aș considera cea mai bună practică. Așa că, iată-ne:

Eu nu m-aș apuca să descarc codul sursă din diverse locuri de pe Internet și apoi să construiesc singur. Acest lucru nu este necesar. Dacă doriți pur și simplu ca Solaris-ul dumneavoastră să aibă la dispoziție uneltele GNU tipice, atunci procedați după cum urmează:

Dacă sunteți pe Solaris 10 ar trebui să obțineți Solaris 10 Companion Disk. Acesta a fost distribuit de Sun, dar acum se găsește în aici. Personal, mi-aș face un obicei din a instala întotdeauna conținutul acestui disc sau cel puțin cele mai importante părți GNU. Faceți-l parte din JumpStart (sau orice altceva folosiți) pentru noile servere din organizația dumneavoastră!

Dacă sunteți pe Solaris 11 viața este mult mai simplă. Instrumentele GNU sunt instalate în mod obișnuit în mod implicit, dar nu toate sunt propagate în zonele locale. IFS, sistemul de împachetare de pe Solaris 11, vă face viața mult mai ușoară, așa că ar trebui să treceți la Solaris 11 (există și multe alte motive). Lista de pachete pe care ar trebui să considerați că trebuie să le aveți întotdeauna disponibile pentru orice zonă sunt acestea:

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

iar dacă utilizați gazda în scopuri de dezvoltare/consolidare, poate doriți să adăugați:

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

Personal, aș face ca cele de mai sus (eventual mai puțin instrumentele de dezvoltare) să facă parte din instalarea implicită a companiei mele pentru noile servere/zone. Administratorii de sistem Solaris insistă adesea să fie diferiți de lumea Linux, dar nu este chiar necesar. Pur și simplu faceți-o și faceți-o parte din instalarea implicită. Nu veți regreta.

Comentarii

  • Nu sunt sigur dacă ați citit partea în care am spus „având în vedere că nu am niciun control asupra mașinii …”. Sunt sigur că este o informație utilă pentru cineva, dar cu greu este un răspuns la întrebarea pe care am pus-o. –  > Por Eric Wilson.
  • Este o informație pentru administratorul de sistem. Acesta v-a dat o mașină infirmă, IMHO. Aceste lucruri ar trebui să fie instalate în mod implicit. Dar da, aveți dreptate, informațiile au fost poate la fel de mult destinate altora care vin aici și vă citesc întrebarea. Astăzi îți lipsește GNU grep, mâine îți va lipsi GNU tar, etc. Doar că nu știi încă. 🙂 –  > Por peterh.