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:
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.
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"
Respostas:
A maneira mais fácil é usar os recursos do GNU grep:
Se você está em outra variante unix que não possui GNU grep, aqui está uma maneira portátil:
fonte
grep -r teststring .
usando ack você apenas digita:
cd /home/user01 && ack --java teststring
fonte
ack --java teststring /home/user01
Para este ack, também conhecido como ack-grep, é o aplicativo assassino em minha mente;)
Você pode
ack some_string /in/path_y
encontrar some_string em path_y Ou mais simplesack some_other_string
encontrar some_other_sting no diretório atual.fonte
Encontrei. A publicação, pois pode ajudar alguém.
Corrija se existe alguma maneira melhor.
fonte
-print0
e-0
quando tubulaçãofind
paraxargs
o 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"
fonte