usando grep para excluir resultados que não correspondem à consulta específica

1
  • Eu criei um arquivo (testimdb) com o seguinte conteúdo:

    film: heat. year: 1995. director: michael mann. actors: al pacino, robert de niro, val kilmer
    film: the godfather part ii. year: 1974. director: francis coppola. actors: al pacino, robert de niro, diane keaton, robert duvall
    film: casino. year: 1995. director: martin scorsese. actors: robert de niro, sharon stone, joe pesci
    film: carlito's way. year: 1993. director: brian de palma. actors: al pacino, sean penn
    
  • Eu posso encontrar todos os filmes estrelados por Pacino e De Niro (grep 'pacino \ | de niro' / root / testimdb). isso resulta na exibição de todos os filmes contendo um dos seus nomes.

  • No entanto, quero excluir qualquer filme que não seja a estrela de ambos - juntos no mesmo filme. Assim, o meu exemplo de pesquisa grep acima não funciona para mim, uma vez que retorna corretamente os resultados que contêm as duas estrelas nos mesmos filmes (calor, padrinho 2) E também recupera resultados de filmes deles não olhando o outro. Por exemplo, "Casino" estrelado por De Niro, mas não Pacino, e "Carlito's Way" apenas estrelas Pacino, mas não De Niro.

  • Como posso obter o grep para exibir apenas os resultados de Pacino e De Niro estrelando juntos em um filme, ignorando todos os outros resultados?

obrigado dave

    
por code46 14.04.2018 / 19:48

1 resposta

1

Isso pode ser feito canalizando grep para grep da seguinte maneira (embora eu tenha certeza de que há uma maneira mais eficiente):

grep 'de niro' testimdb | grep 'pacino'

Uso da regex estendida em grep :

grep -E 'de niro.*pacino|pacino.*de niro' testimdb
    
por 14.04.2018 / 20:02