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.
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?
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.
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
Você pode tentar isso
grep -rl '75447A831E943724DD2DE9959E72EE31' * > found.txt
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 ...
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
Tags command-line grep