Questão Em * nix, como posso encontrar uma string dentro de um arquivo dentro de um diretório?


Eu estou usando o Ubuntu Linux, e eu uso o bash de um emulador de terminal todos os dias para muitas tarefas.

Eu gostaria de saber como encontrar uma string ou uma substring dentro de um arquivo que está dentro de um diretório específico.

Se eu soubesse o arquivo que continha minha substring de destino, eu apenas preencheria o arquivo e passaria pelo grep, assim:

cat file | grep mysubstring

Mas nesse caso, a subseqüente infra-estrutura pode estar em qualquer lugar dentro de um diretório conhecido.

Como eu caço minha substring?


2


origem


apenas como uma nota ... você não tem que canalizar cat para grep. grep pode ler arquivos muito bem. - xenoterracide


Respostas:


Use um curinga da shell:

grep mysubstring *

Se você deseja pesquisar subdiretórios, use o -r opção de recorrer a eles:

grep -r myssubstring .

11



ou grep -r diretório mysubstring - xenoterracide


find -type f | xargs grep mysubstring

Esses comandos (find, xargs e grep) tem muitas opções, então você pode ajustar esta operação substancialmente.


4



adicionar -print0 para encontrar e -0 para xargs se seus arquivos / diretórios podem ter espaços em seus nomes: find -type f -print0 | xargs -0 grep mysubstring - Doug Harris


digamos que eu quero encontrar todos os arquivos de código python que contêm o texto "wiki" sob o diretório "~ / projects", aqui está o script:

grep -lir "wiki" ~/projects/**/*.py

ajustar o script aos seus requisitos específicos.


4





Não importa como você faz isso, não cat arquivos em grep. Sua versão original do

cat file | grep mysubstring

é mais corretamente feito como

grep mysubstring file

2



embora você esteja certo, essa não é uma resposta real para a pergunta. - xenoterracide
Por que você está me contando isso? - Andy Lester


Se você não precisa fazer isso no modo batch, você pode instalar o midnight commander (mc), ele pode procurar por strings em arquivos.


1





Se você quiser encontrar todos os arquivos com uma certa string recursiva do diretório "atual", use:

find . -type f -exec grep -l mysubstring {} \;

(deve funcionar na maioria dos * nix ')


1