Buscar un patrón de texto en Linux

20

Soy un novato en Linux. Necesito buscar una cadena "string de prueba" en todos los archivos * .java que se encuentran en / home / user1 / (incluidas las subcarpetas). ¿Cómo puedo hacerlo en Linux a través del comando de shell?

Darth Vader
fuente
Ha habido varias preguntas sobre archivos de búsqueda de
expresiones
una búsqueda rápida arrojó esta pregunta: superuser.com/questions/208271/... no es exactamente lo que estás buscando, pero en lugar de cp ejecutivo, podrías
atrapar
Puedo enumerar el archivo que tiene la extensión con find / home / user1 -name * .java ¿Cómo usar grep en eso?
darthvader

Respuestas:

23

La forma más fácil es usar las características de GNU grep:

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

Si alguna vez usa otra variante de Unix que no tiene GNU grep, aquí hay una forma portátil:

find /home/user1 -name '*.java' -exec grep teststring {} +
Gilles 'SO- deja de ser malvado'
fuente
agradable no sabía acerca de esta función grep
RobotHumans
1
Si está buscando el directorio actual y todos los archivos esgrep -r teststring .
Chris Moschini
4

usando ack simplemente escribes:cd /home/user01 && ack --java teststring

Benoit
fuente
1
oack --java teststring /home/user01
Andy Lester
4

Para este ack aka ack-grep es la aplicación asesina en mi mente;)

Puede ack some_string /in/path_yencontrar some_string en path_y O más simple ack some_other_stringencontrar some_other_sting en el directorio actual.

zzeroo
fuente
2

Lo encontré. Publicarlo ya que podría ayudar a alguien.

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

Corrija si hay alguna manera mejor.

Darth Vader
fuente
3
En general, se debe utilizar -print0y -0cuando las tuberías finden xargsque funcione correctamente con archivos que pueden tener espacios o saltos de línea en sus nombres:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
En pausa hasta nuevo aviso.
0
grep -irl teststring *java
Unni
fuente