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

1

Digamos que eu tenha um diretório ~/mydirque contenha vários arquivos de texto. Quero pesquisar searchtermneste diretório e exibir o arquivo que tem mais correspondências. Como posso fazer isso usando apenas um comando?

Curinga
fonte

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

Então é só ligar ./myscript searchterm

Se você deseja pesquisar recursivamente, altere -cpara -crno primeiro grepcomando.

As partes desse 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 nenhuma correspondência, menos abrirá vazio.

Curinga
fonte
0

É o suficiente

grep -c 'pattern' ~/mydir/* 2>/dev/null| sort -rk2n -t:| sed 's/:.*//;q'
Costas
fonte
Exceto que ele retorna um arquivo arbitrário se não houver nenhum resultado. Mas é bom saber! Com isso, posso atender a headchamada em meu comando.
Wildcard