Como posso usar o grep para procurar em um arquivo por combinações de strings?

0

O que estou tentando fazer é usar o grep para pesquisar meus logs do Apache. O que eu quero é encontrar todas as entradas de um determinado endereço IP que também tenha .html ou .php na linha. Em outras palavras, quero ver quais páginas eles acessaram sem todo o Javascript, CSS e imagens incluídas.

Eu sei que posso pesquisar as linhas com o endereço IP com grep '123.123.123.123' logfile , mas como posso adicionar ao padrão para que ele corresponda apenas às linhas que incluem o endereço IP e '.php' ou '.html' ?

    
por nathangiesbrecht 25.02.2014 / 19:41

3 respostas

3
grep '123\.123\.123\.123.*\(\.php\|\.html\)' logfile

A menos que, é claro, o .php ou .html preceda o endereço IP:

grep '\(\.php\|\.html\).*123\.123\.123\.123' logfile

Você sempre pode criar um regex que faça as duas coisas, mas uma opção simples é usar dois greps:

grep '123\.123\.123\.123' logfile | grep '\.php\|\.html'

Observe que \. que eu esqueci originalmente corresponde a um ponto real, enquanto um ponto por si só corresponde a qualquer caractere. Pode ser mais fácil omitir o \ , pois é mais fácil de digitar e é improvável que cause problemas. Também grep -F , como na resposta de Hauke, irá corresponder a strings fixas, não há necessidade de \ . grep -E também pode ser usado para ativar expressões estendidas, o que significa que \ antes de cada parêntesis ou | devem ser omitidos.

    
por 25.02.2014 / 19:44
2
echo 123.123.123.123 foo.html | grep -E '123\.123\.123\.123.*\.(php|html)'

ou, talvez mais rápido

echo 123.123.123.123 foo.html | grep -F 123.123.123.123 | \
  grep -F -e .php -e .html
    
por 25.02.2014 / 19:46
1

Pipe as duas pesquisas juntas:

grep '123\.123\.123\.123' whatever.log | grep -P "php|html"

O primeiro grep escolhe as linhas com o ip, depois o segundo filtra as linhas que contêm "php" ou "html".

Note que para isto funcionar, você precisa de um grep com capacidade para PCRE (daí -P alterna no segundo grep ). A resposta de Graeme contém uma variante que não depende disso.

    
por 25.02.2014 / 19:45