No seu caso, você não deseja que o computador trabalhe duro. Mas se for apenas um problema de legibilidade humana, você pode usá less- lo através de um cano. Isso irá preencher a tela e você pode pressionar ENTER para ver mais linhas e qsair:grep "SomeText" somefile.csv | less
SilentSteel
Respostas:
240
A -mopção é provavelmente o que você está procurando:
grep -m 10 PATTERN [FILE]
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.
Nota: grep para de ler o arquivo assim que o número especificado de correspondências for encontrado!
oi, tentei, funciona basicamente, mas não parece que o grep "pare" de pensar depois que ele encontrar as 10 primeiras linhas, parece que ele continua pensando e "usando minha CPU" e simplesmente não imprime, está correto? thansk
Jas
6
@ Jason: esse não parece ser o caso: o grep leva 0,005s com -m 1e 1,579s sem em um arquivo com 10 milhões de linhas no meu laptop.
18713 Grégoire
3
A penetração tailgeralmente funciona, mas é interrompida principalmente se você estiver cumprindo o contexto, por exemplo grep -A10 PATTERN, usando tailtrunca o contexto, em vez do número de resultados. Esta resposta foi o que eu estava procurando.
dimo414
1
-m 10é a opção que faz a diferença ao receber vários arquivos! A tubulação na cabeça não mostrará correspondências nos arquivos subseqüentes se houver muitas correspondências no primeiro arquivo. Obrigado !
Julien
1
IMHO isso deve ser marcado como a resposta aceita, pois não requer outra ferramenta. BTW, é mais fácil de lembrar esta opção quando sabendo que é o atalho de --max-count
Isso não exigirá a pesquisa do arquivo inteiro - ele será interrompido quando as dez primeiras linhas correspondentes forem encontradas. Outra vantagem dessa abordagem é que ela retornará não mais que 10 linhas, mesmo se você estiver usando grep com a opção -o.
Por exemplo, se o arquivo contiver as seguintes linhas:
Observe que você não pode usar o | headcanal ao usar grepcom -Aou -B(e, portanto, não apenas pesquisando resultado ( -o), mas também contexto). Nesse caso, você -mdeve informar ao grep o número de linhas com resultados a serem retornados.
Attila O.
17
Usar head não impede que o grep seja executado em todo o arquivo. Usar a opção -m no grep faz.
LopSae 9/04
7
Abordagem awk:
awk '/pattern/{print; count++; if (count==10) exit}' file
less
- lo através de um cano. Isso irá preencher a tela e você pode pressionar ENTER para ver mais linhas eq
sair:grep "SomeText" somefile.csv | less
Respostas:
A
-m
opção é provavelmente o que você está procurando:De
man grep
:Nota: grep para de ler o arquivo assim que o número especificado de correspondências for encontrado!
fonte
-m 1
e 1,579s sem em um arquivo com 10 milhões de linhas no meu laptop.tail
geralmente funciona, mas é interrompida principalmente se você estiver cumprindo o contexto, por exemplogrep -A10 PATTERN
, usandotail
trunca o contexto, em vez do número de resultados. Esta resposta foi o que eu estava procurando.-m 10
é a opção que faz a diferença ao receber vários arquivos! A tubulação na cabeça não mostrará correspondências nos arquivos subseqüentes se houver muitas correspondências no primeiro arquivo. Obrigado !Outra opção é apenas usar head :
Isso não exigirá a pesquisa do arquivo inteiro - ele será interrompido quando as dez primeiras linhas correspondentes forem encontradas. Outra vantagem dessa abordagem é que ela retornará não mais que 10 linhas, mesmo se você estiver usando grep com a opção -o.
Por exemplo, se o arquivo contiver as seguintes linhas:
Então esta é a diferença na saída:
Usar
head
retorna apenas 2 resultados, conforme desejado, enquanto -m2 retorna 3.fonte
| head
canal ao usargrep
com-A
ou-B
(e, portanto, não apenas pesquisando resultado (-o
), mas também contexto). Nesse caso, você-m
deve informar ao grep o número de linhas com resultados a serem retornados.Abordagem awk:
fonte
Usando cauda:
fonte
Para 2 casos de uso:
grep -m 2
é a ocorrência máxima por arquivo.git grep
que não leva-m
Uma boa alternativa nesses cenários é
grep | sed 2q
grep 2 primeiras ocorrências em todos os arquivos. documentação sed: https://www.gnu.org/software/sed/manual/sed.htmlfonte