Como evitar que o grep imprima a mesma string várias vezes?

5

Se eu grep um arquivo contendo o seguinte:

These are words
These are words
These are words
These are words

... para a palavra These , imprimirá a string These are words quatro vezes.

Como posso evitar que o grep imprima cadeias recorrentes mais de uma vez? Caso contrário, como posso manipular a saída do grep para remover linhas duplicadas?

    
por Trae 05.10.2015 / 08:51

2 respostas

9

A filosofia Unix é ter ferramentas que façam uma coisa e as façam bem. Nesse caso, grep é a ferramenta que seleciona texto de um arquivo. Para descobrir se há duplicatas, classifica o texto. Para remover as duplicatas, usa-se a opção -u para sort . Assim:

grep These filename | sort -u

sort tem muitas opções: consulte man sort . Se você quiser contar duplicatas ou ter um esquema mais complicado para determinar o que é ou não uma duplicata, envie a saída de classificação para uniq : grep These filename | sort | uniq e veja man uniq 'para opções.

    
por John1024 05.10.2015 / 18:26
1

Usando grep e uma opção adicional, se você estiver procurando apenas uma única string

grep -m1 'These' filename

De man grep

-m NUM, --max-count=NUM
        Stop reading a file after NUM matching lines.  If the input is
        standard input from a regular file, and NUM matching lines are
        output, grep ensures that the standard input is positioned  to
        just  after  the  last matching  line  before exiting, regardless
        of the presence of trailing context lines.  This enables a calling
        process to resume a search.  When grep stops after NUM matching
        lines, it outputs any trailing context lines.  When the -c or
        --count option is also used, grep does not output a count greater
        than NUM.  When the -v or --invert-match option is also used, grep
        stops after outputting NUM non-matching lines.

ou usando awk ;)

awk '/These/ {print; exit}' foo
    
por A.B. 05.10.2015 / 19:24