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.


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

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


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.


2

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

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

Corrija se existe alguma maneira melhor.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.