Grep para retornar todo o conteúdo do arquivo

1

Eu quero pesquisar recursivamente para uma determinada palavra, digamos MyWord, mas quero imprimir todo o conteúdo de todos os arquivos que contenham MyWord. Como faço isso?

Acontece que eu particularmente me preocupo com arquivos binários de sqlite, ambos os grepping, e lendo o resultado como um arquivo de texto, ao invés de binário.

    
por Baron Yugovich 18.04.2018 / 00:26

3 respostas

2

Eu usaria:

sudo grep -rIlZ --exclude=${HISTFILE##*/} --exclude-dir={boot,dev,lib,media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e 'MyWord' | xargs -0 cat > MyOutputFile
  • Largue sudo se não estiver procurando nos diretórios do sistema.
  • Alterar (diretório raiz) '/' para o diretório atual '.' ou diretório específico, ou seja, '/home/me/stuff'
  • Remova mnt para incluir arquivos do Windows montados em mnt .
  • Remova lib para incluir arquivos de origem do Linux
  • Excluindo diretórios necessários para a velocidade. Veja: 'grep'ing todos os arquivos para uma string demora muito tempo
  • --exclude=${HISTFILE##*/} é necessário se você executar o comando uma segunda vez ou se a string de procura MyWord já tiver sido usada em um comando diferente antes. Isso evita a inclusão de 5 mil linhas de histórico ($ HISTFILE).
  • -r recursivo, I ignora arquivos binários, lZ gera um byte zero após cada nome de arquivo em vez da nova linha usual. Terminadores nulos (zero bytes) necessários para perl -0 , sort -z e xargs usado para cat (imprimir) o conteúdo do arquivo.
  • > MyOutputFile envia a saída para o arquivo em vez da tela. Deixe isso para a saída para a tela.

Observação: Faltando a saída é o nome do arquivo, apenas o conteúdo do arquivo é listado.

    
por WinEunuuchs2Unix 18.04.2018 / 01:09
1

Você também pode usar find com grep :

find . -type f -exec grep -wq 'MyWord' {} \; -exec cat {} >> /path/to/outfile \;

Isto irá encontrar arquivos contendo a palavra "MyWord" de forma recursiva e logo após a primeira correspondência encontrada, então redirecionará todo o conteúdo do arquivo para um novo arquivo.

    
por devWeek 18.04.2018 / 00:44
0

Se a sua pasta não for tão grande, tente:

grep -rz '.*MyWord.*'  myfolder > output

se necessário, adicione -a

    
por JJoao 11.05.2018 / 12:44