Cerca un modello di testo in Linux


20

Sono un principiante di Linux. Devo cercare una stringa "teststring" in tutti i file * .java che rientrano in / home / user1 / (comprese le sottocartelle). Come posso farlo in Linux tramite il comando shell.


Ci sono state diverse domande riguardanti la ricerca di file regex in sottodirectory dalla riga di comando
— RobotHumans,

una rapida ricerca ha sollevato questa domanda: superuser.com/questions/208271/… non esattamente quello che stai cercando, ma invece di exec cp potresti cat / grep qualunque cosa
— RobotHumans,

Posso elencare il file che ha l'estensione con find / home / user1 -name * .java Come usare grep su questo?
— darthvader,

Risposte:


23

Il modo più semplice è usare le funzionalità di GNU grep:

grep -r --include '*.java' teststring /home/user1

Se sei mai su un'altra variante unix che non ha GNU grep, ecco un modo portatile:

find /home/user1 -name '*.java' -exec grep teststring {} +

nice non sapeva di questa funzionalità grep
— RobotHumans,

1
Se stai cercando la directory corrente e tutti i file ègrep -r teststring .
— Chris Moschini,


4

Per questo ack aka ack-grep è l'app killer nella mia mente;)

Puoi ack some_string /in/path_ytrovare some_string in path_y O più semplice ack some_other_stringtrovare some_other_sting nella directory corrente.


2

Trovato. Pubblicarlo perché potrebbe aiutare qualcuno.

find /home/user01 -name *.java | xargs grep "teststring"

Correggi se esiste un modo migliore.


3
In generale, è consigliabile utilizzare -print0e -0quando tubazioni findin xargsfunzioni correttamente con i file che possono avere spazi o nuove righe nei loro nomi:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
— in pausa fino a nuovo avviso.

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.