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.