como encontrar uma palavra em arquivos de texto de um diretório [duplicado]

26

Suponha que eu tenha um diretório com o nome _file e inclua dois subdiretórios como _1 e _2 e em cada um eu tenha alguns arquivos de texto. Eu quero procurar uma palavra como foo em um desses arquivos de texto. Como eu posso fazer isso? Eu quero saber quais arquivos de texto em todo o diretório contêm essa palavra?

    
por Mohammad Reza Rezwani 07.05.2014 / 14:07

4 respostas

10
  1. Abra um terminal.
  2. Instale ack-grep digitando sudo apt-get install ack-grep
  3. Altere para o diretório em que você deseja pesquisar e digite ack-grep foo . lista todas as correspondências em todos os arquivos nesse diretório.
por Mahesh 07.05.2014 / 14:12
54

Se você não quiser instalar software adicional, basta usar grep no terminal. Para pesquisar recursivamente por diretórios, você pode usar a opção -r (consulte man grep para obter detalhes). A sintaxe que você está procurando é provavelmente:

grep -r "[STRING TO SEARCH FOR]" "[DIRECTORY TO SEARCH]"

Então, por exemplo, se eu quiser procurar pela string "asdf" em todos os arquivos em todos os subdiretórios de "/ tmp / testdir /", o comando se parece com isto:

grep -r "asdf" "/tmp/testdir/"

As aspas não são estritamente necessárias, mas se a sua string ou diretório contiver espaços em branco, você teria que mascará-los usando o caractere \ ...

    
por soulsource 07.05.2014 / 14:20
7

Basta instalar gnome-search-tool usando sudo apt-get install gnome-search-tool
Pesquise no traço "pesquisar arquivos" e inicie-o.

Veja a imagem abaixo:

  1. Deixe a seção "nome contém" vazia.
  2. Selecione sua pasta.
  3. Desdobre a parte "selecionar mais opções" e escolha "contém o texto" e, em seguida, pressione Adicionar.
  4. Digite aqui o texto que você deseja pesquisar e clique em encontrar no canto inferior direito.

Aproveite.

    
por Parto 07.05.2014 / 14:15
7

Você pode usar o recursivo grep com o sinal -l para imprimir apenas o nome do arquivo em vez da linha correspondente:

grep -Rl foo .

Ou você pode usar find :

find . -type f -exec grep -l foo {} +

você pode usar extglob e normal grep

shopt -s extglob
grep -l foo **/*
    
por terdon 07.05.2014 / 16:01