Usando grep para encontrar uma string nos arquivos

3

Como posso encontrar uma string em arquivos em um diretório, usando nomes de arquivos começando com a letra a. Eu também quero obter o número de ocorrências dessa string da grepexecução.

Eu tentei isso

cat * | grep -cmas ele pesquisa todos os arquivos. Eu só quero procurar arquivos que começam com a letra a

Simon Sheehan
fonte
Observe também que grep -cnão fornece o número de ocorrências ... Fornece o número de linhas correspondentes. Então se você tem uma linha que diz "stringstring", que contará como 1, não 2.

Respostas:

8
grep -c string a*
John Kugelman
fonte
Obrigado. Podemos exibir os arquivos que são exibidos com os resultados datados como quando fazemos ls -ltrh. Podemos adicionar esse tipo de parâmetros também?
4

grep -c string a*

Ned Batchelder
fonte
3

método alternativo, fornecendo a você o poder e a flexibilidade do comando ' find ':

encontrar . -name "a *" | xargs grep -c string

Árvore77
fonte
minha versão:find . -type f -iname foo* -print | xargs egrep -i your_regex
woohoo
1

grep -c string a *

oraz
fonte
0

Como os outros disseram, sua solução básica é:

grep -c string a*

Você disse que queria classificar os arquivos e listar informações extras.

Você não pode entender tudo isso com grep, mas ls faz parte disso se você não estiver preocupado com a eficiência e os arquivos não tiverem espaços ou outros caracteres estranhos:

ls -tr `grep -l string a*` | while read file; do
    grep -c string "$file" | tr '\n' '\t'
    ls -l "$file"
done

O primeiro grep nos backticks procura por arquivos correspondentes, listando apenas os nomes. O primeiro ls os classifica por tempo de modificação ao contrário. Em seguida, pesquisamos cada arquivo uma segunda vez para contar ocorrências e acrescentamos a contagem à listagem "ls -l" padrão.

Isso será lento; se você realmente precisa de uma versão mais rápida, provavelmente pode hackear uma em uma linguagem de script.

Walter Mundt
fonte