2009-02-20 7 views
5

Ciao Sto usando questo comando per trovare testo all'interno di file in linuxCome stampare la riga che corrisponde al mio testo usando find in linux?

find ./ -type f -exec grep -l "Text To Find" {} \; 

Il comando funziona benissimo, ma vorrei per stampare automaticamente la riga che contiene il testo o se è possibile gli abeti due righe sopra il testo e le due righe dietro il testo.

anche un altro suggerimento per trovare il testo e stampare le linee invece di utilizzare trovare sono i benvenuti,

Grazie mille in anticipo.

risposta

14
find ./ -type f -exec grep -Hn "Text To Find" {} \; 

Usa -A e -B bandiere di stampare righe prima e dopo la partita:

find ./ -type f -exec grep -Hn -A1 -B1 "Text To Find" {} \; 

anche si può semplicemente utilizzare grep:

grep -R -Hn -A1 -B1 "Text To Find" * 
2

Perché non solo grep?

grep -r -C2 "Text To Find" * 
+0

Perché l'opzione '-r' non è portabile (in effetti nessuno dei due è' -C' ma hey, ha chiesto di farlo.)) – vladr

+0

Il poster diceva "Anche altri suggerimenti per trovare testo e stampare le righe invece di usare find sono i benvenuti" e taggato la domanda "linux", quindi GNU grep probabilmente sta bene. –

1

Per stampare le linee (con il file che lo contiene):

find . -type f -exec grep "text" {} /dev/null \;

Per visualizzare 2 linee seguendo la linea che corrisponde aggiungere -A2 dopo "grep" in sopra la riga, -B2 per le due linee precedenti e -C2 per entrambi.

1
find ./ -type f -exec egrep -H -B 2 -A 2 "Text" '{}' ';' 
3

È possibile utilizzare il seguente alternativo find costrutto per una ricerca più veloce:

find . -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find" 

Invece di invocare grep per ogni file (che è quello che -exec ... {} fa), che verrà richiamare grep per mazzi di file.

Nota che le opzioni -print0, -0 e -C2 non sono portabili (funzionerà bene con le varianti GNU dei programmi find, xargs e grep cioè la maggior parte, BSD ecc installazioni Linux così come Cygwin e MinGW, ma non lo fanno aspettiamo che lavorino con installazioni "più vecchie" di Solaris, HPUX ecc.)

+0

E assicurati di usare "-print0" per trovare e "-0" su xargs. Questo aiuterà con i file che hanno spazi nei loro nomi usando NULL come delimitatore piuttosto che spazi. – Andy