grep - nome do arquivo de lista onde a correspondência é encontrada

14

Eu tenho um monte de arquivos .html em um diretório. Eu quero olhar através de cada arquivo e corresponder a um padrão (MD5). Tudo isso é bastante fácil. O problema é que eu preciso saber em qual arquivo a correspondência foi encontrada.

cat *.html | grep 75447A831E943724DD2DE9959E72EE31

Retorna apenas o conteúdo da página HTML onde a correspondência é encontrada, mas não me diz qual arquivo foi encontrado. Como posso obter o grep para mostrar o nome do arquivo onde a minha correspondência é encontrada?

    
por BeMy Friend 19.02.2015 / 07:07

5 respostas

18

grep -H 75447A831E943724DD2DE9959E72EE31 *.html
-H, --with-filename
              Print the file name for each match. This is
              the default when there is more than one file
              to search.
    
por Cyrus 19.02.2015 / 07:09
10

Eu uso este o tempo todo para procurar por arquivos contendo uma string, RECURSIVELY em um diretório (isto é, atravessando qualquer sub sub pasta) grep -Ril "yoursearchtermhere"

  • R é pesquisar recursivamente (seguindo os links simbólicos)
  • i é torná-lo insensível a maiúsculas e minúsculas
  • l é apenas para listar o nome dos arquivos.

respondendo sua pergunta grep -l '75447A831E943724DD2DE9959E72EE31' *.html fará mas você pode apenas fazer grep -Ril '75447A831E943724DD2DE9959E72EE31' para procurar essa cadeia, sem distinção entre maiúsculas e minúsculas, em qualquer arquivo em qualquer subpasta

    
por thebugfinder 19.02.2015 / 08:36
6

Você pode tentar isso

grep -rl '75447A831E943724DD2DE9959E72EE31' * > found.txt
    
por Red Aura 19.02.2015 / 08:07
1
grep -r -H 75447A831E943724DD2DE9959E72EE31 *.html | awk -F : ' { print  } '

Alternativa para

grep -r -l 75447A831E943724DD2DE9959E72EE31 *.html

Fazer acima pesquisará recursivamente na pasta e nas subpastas e imprimirá o caminho do arquivo ...

    
por Drew 15.06.2017 / 20:22
0

A resposta postada por Cyrus é absolutamente correta e é o The Right Way TM para fazer isso com grep se nós precisarmos encontrar apenas arquivos . Quando nomes de arquivos precisam análise adicional ou operações nos nomes de arquivos encontrados, podemos recorrer ao uso de while loop com a instrução if . Aqui está um exemplo em que a lista de nomes de arquivos vem de uma estrutura find + while muito usada para análise segura de nomes de arquivos.

find -type f -name "*.html" -print0 | while IFS= read -r -d '' filename
do
    if grep -q 'PATTERN' "$filename"
    then
        printf "%s found in %s\n" 'PATTERN' "$filename"
        # Here we can insert another command or function
        # to perform other operations on the filename
    fi
done
    
por Sergiy Kolodyazhnyy 15.06.2017 / 21:31