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?


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 {} +

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

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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.