La ricerca ricorsiva non funziona per grep su Solaris


20

Sul nostro server Solaris sto scoprendo che grep -rnon funziona, che è il solito modo che uso grep. Sembra che egrepabbia lo stesso comportamento.

Dato che non ho alcun controllo sulla macchina, c'è un modo per grepeseguire una ricerca ricorsiva? O devo reindirizzare l'output di findin grep?


1
Quale versione di Solaris stai usando?
jlliagre,

Risposte:


4

Non ho familiarità con Solaris, ma se si passa da GNU / Linux a Solaris, la maggior parte dei comandi si comporterà in modo leggermente diverso. La versione GNU degli strumenti Unix presenta funzionalità aggiuntive mancanti negli Unix "proprietari".

Puoi scaricare GNU grep (s) qui quindi compilare e installare.

Se si dispone dell'accesso root, è possibile che si desideri eseguire configure --prefix = / usr / local Tale che i programmi di installazione si installino in / usr / local

Se non si dispone dell'accesso root, è possibile eseguire configure --prefix = $ {HOME} in modo tale che le utility vengano installate nella propria directory home


--prefix=${HOME}}/.localè probabilmente più consigliabile ... non c'è bisogno di ingombrare la home directory con sharee le libcartelle
jpaugh

1
Il disordine di un uomo è organizzato da un altro uomo
bd

Nessun dubbio! Onestamente, sto proteggendo dall'off-day quando dico " share? Dev'essere una directory spazzatura!" rm -rfDoh!
jpaugh,

31

Se si desidera utilizzare find, questo sarebbe il modo più veloce:

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

Tuttavia, Gnu grep è molto probabilmente già installato sul tuo computer.

Fa parte dell'installazione predefinita su Solaris 11 in /usr/gnu/bin/grep. Lo stesso vale per Solaris 10 dove lo trovi /usr/sfw/bin/ggrep. Nelle versioni precedenti, potrebbe essere stato installato da sunfreeware o altri repository, controllare /usr/local/bin/grepe individuare /opt/csw/bin/grepposizioni comuni.


È inoltre possibile utilizzare l' -nameopzione con find.
Sleepyweasel,

@sleepyweasel -namenon cercherà all'interno dei file ma cercherà solo i nomi dei file che non sono quelli richiesti dall'OP.
jlliagre,

6

Usa invece ggrep se è installato.

Ad esempio, cerca "mysearchstring" dalla directory corrente fino a tutte le sottodirectory ( -R) e mostra il nome e il percorso del file per le corrispondenze ( -H) e ignora i file binari ( -I). Non dimenticare la *fine del comando.

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

ggrep si trova in /usr/sfw/bin Puoi aggiungerlo al tuo profilo con un comando EXPORT in modo da poterlo chiamare direttamente dalla riga di comando.

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

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


1
Almeno sul mio sistema, ggrepè davvero GNU grep. Grazie!
jpaugh,

3

Scarica lo ackscript perl autonomo da http://betterthangrep.com/ , inseriscilo nel tuo $HOME/bine impara invece a usarlo. Trovo che, come pubblicizzato, sia meglio di grep per molti usi nel mio lavoro di sviluppo quotidiano.


3

Solaris grep non ha -ropzioni.

Puoi usare il seguente comando.

find . -type f | xargs grep 'sometext'

2
Non è necessario il "controllo del sistema" per compilare GNU grep e installarlo da qualche parte nella directory home.
Keith Thompson,

@KeithThompson grazie per averlo sottolineato. Ho corretto la mia risposta.
Sachin Divekar,

Questo è molto utile per trovare tutti i file corrispondenti a un modello di nome e mostrare i risultati con il file. es. find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse

1

Sì, avrai bisogno del GNU grep. Personalmente non mi manca il flag "-r" perché puoi fare lo stesso con una combinazione di finde grepma questo ricorda che avere gli strumenti GNU disponibili sul tuo box Solaris è ciò che considererei la migliore pratica. Quindi eccoci qui:

Non vorrei scaricare il codice sorgente da vari luoghi su Internet e poi costruirti. Non è necessario Se si desidera semplicemente che Solaris disponga degli strumenti GNU tipici disponibili, procedere come segue:

Se si utilizza Solaris 10, è necessario ottenere il disco Companion di Solaris 10. Questo era distribuito da Sun ma ora vive qui . Personalmente, farei sempre un habbit per installare il contenuto di questo disco o almeno le parti GNU più importanti. Renderlo parte del JumpStart (o qualunque cosa tu usi) per i nuovi server della tua organizzazione!

Se usi Solaris 11, la vita è molto più semplice. Gli strumenti GNU sono in genere installati per impostazione predefinita, ma non tutti vengono propagati in zone locali. IFS, il sistema di packaging di Solaris 11, ti semplifica la vita, quindi dovresti davvero passare a Solaris 11 (molti altri motivi). L'elenco dei pacchetti che dovresti considerare sempre disponibili per qualsiasi zona sono questi:

pkg: // Solaris / archiviatore / gnu-tar
pkg: // Solaris / developer / GNU-binutils
pkg: // Solaris / diagnostica / top
pkg: // / file Solaris / GNU-coreutils
pkg: // / file Solaris / GNU-Findutils
pkg: // Solaris / text / gawk
pkg: // Solaris / testo / gnu-Diffutils
pkg: // Solaris / text / gnu-grep
pkg: // Solaris / text / gnu-sed

e se usi l'host per scopi di sviluppo / costruzione potresti voler aggiungere:

pkg: // Solaris / developer / build / GNU-make
pkg: // Solaris / developer / build / make
pkg: // Solaris / developer / gcc-45
pkg: // solaris / sistema / intestazione
pkg: // Solaris / developer / build / autoconf
pkg: // Solaris / developer / build / automake-110

Personalmente farei quanto sopra (potenzialmente meno gli strumenti di sviluppo) parte dell'installazione predefinita della mia azienda per nuovi server / zone. Gli amministratori di sistema di Solaris spesso insistono per essere diversi dal mondo Linux, ma in realtà non è necessario. Fallo e rendilo parte dell'installazione predefinita. Non te ne pentirai.


Non sono sicuro se leggi la parte in cui ho detto "dato che non ho alcun controllo sulla macchina ..." Sono sicuro che si tratta di informazioni utili per qualcuno, ma non è certo una risposta alla domanda che ho posto .
Eric Wilson,

Sono informazioni per il tuo amministratore di sistema. Ti ha dato una macchina paralizzata IMHO. Queste cose dovrebbero essere installate di default. Ma sì, hai ragione, forse le informazioni erano destinate agli altri che venivano in questo posto e leggevano la tua domanda. Oggi ti manca GNU grep, domani ti mancherà GNU tar, ecc. Non lo sai ancora. :-)
peterh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.