Procure um padrão de texto no linux

20

Eu sou um novato no Linux. Eu preciso procurar por uma string "teststring" em todos os arquivos * .java que estejam em / home / user1 / (incluindo subpastas). Como posso fazer isso no linux via comando shell.

darthvader
fonte
Houve várias perguntas sobre arquivos de busca regex em subdiretórios a partir da linha de comando
RobotHumans
uma rápida pesquisa transformou-se esta pergunta: superuser.com/questions/208271/... não exatamente o que você está procurando, mas em vez de cp exec você poderia cat / grep qualquer que seja
RobotHumans
Posso listar o arquivo com a extensão com find / home / user1 -name * .java Como usar o grep nisso?
Darthvader

Respostas:

23

A maneira mais fácil é usar os recursos do GNU grep:

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

Se você está em outra variante unix que não possui GNU grep, aqui está uma maneira portátil:

find /home/user1 -name '*.java' -exec grep teststring {} +
Gilles 'SO- parar de ser mau'
fonte
bom não sabia sobre esse recurso grep
RobotHumans
11
Se você estiver procurando a dir atual e todos os arquivos Égrep -r teststring .
Chris Moschini
4

usando ack você apenas digita:cd /home/user01 && ack --java teststring

Benoit
fonte
11
ouack --java teststring /home/user01
Andy Lester
4

Para este ack, também conhecido como ack-grep, é o aplicativo assassino em minha mente;)

Você pode ack some_string /in/path_yencontrar some_string em path_y Ou mais simples ack some_other_stringencontrar some_other_sting no diretório atual.

zzeroo
fonte
2

Encontrei. A publicação, pois pode ajudar alguém.

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

Corrija se existe alguma maneira melhor.

darthvader
fonte
3
Geralmente, você deve usar -print0e -0quando tubulação findpara xargso trabalho corretamente com arquivos que podem ter espaços ou novas linhas em seus nomes:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
pausa até novo aviso.
0
grep -irl teststring *java
Unni
fonte