Como posso abrir o arquivo com mais correspondências para um dado regex?

1

Digamos que eu tenha um diretório ~/mydir que tenha um monte de arquivos de texto nele. Eu quero procurar searchterm neste diretório e, em seguida, exibir o arquivo que tem mais correspondências. Como posso fazer isso usando apenas um comando?

    
por Wildcard 16.10.2015 / 00:25

2 respostas

1

Colocar a seguinte linha em um script fará isso:

grep -c "$1" ~/mydir/* | grep -v ':0' | sort -t: -k2 -r -n | head -1 | sed 's/:.*//' | xargs less

Depois é só ligar para ./myscript searchterm

Se você quiser pesquisar recursivamente, altere -c para -cr no primeiro comando grep .

As partes deste pipeline, na ordem:

grep -c "$1" ~/mydir/*    # Outputs a list of the files in ~/mydir/ with :<count>
                          # appended to each, where <count> is the number of
                          # matches of the $1 pattern in the file.

grep -v ':0'              # Removes the files that have 0 results from
                          # the list.

sort -t: -k2 -r -n        # Sorts the list in reverse numerical order
                          # (highest numbers first) based on the
                          # second ':'-delimited field

head -1                   # Extracts only the first result
                          # (the most matches)

sed 's/:.*//'             # Removes the trailing ':<count>' as we're
                          # done with it

xargs less                # Passes the resulting filename as
                          # an argument to less

Se não houver correspondência, menos será aberto vazio.

    
por 16.10.2015 / 00:25
0

É o suficiente

grep -c 'pattern' ~/mydir/* 2>/dev/null| sort -rk2n -t:| sed 's/:.*//;q'
    
por 16.10.2015 / 00:38