Quero pesquisar uma string e encontrar o número de ocorrências em um arquivo usando o editor vi.
Quero pesquisar uma string e encontrar o número de ocorrências em um arquivo usando o editor vi.
Respostas:
:g/xxxx/d
Isso excluirá todas as linhas com padrão e relatará quantas foram excluídas. Desfaça para recuperá-los depois.
O jeito é
:% s / padrão // gn
Você precisa da nbandeira. Para contar palavras, use:
:%s/\i\+/&/gn
e uma palavra particular:
:%s/the/&/gn
Consulte a count-itemsseção de documentação.
Se você simplesmente digitar:
%s/pattern/pattern/g
então a linha de status fornecerá o número de correspondências no vi também.
(parecido com o que o Gustavo disse, mas além disso:)
Para qualquer pesquisa anterior , você pode fazer simplesmente:
:%s///gn
Um padrão não é necessário, porque ele já está no registro de pesquisa ( @/).
"%" - faz s/em todo o arquivo
"g" - pesquisa global (com vários resultados em uma linha)
"n" - impede qualquer substituição de s/- nada é excluído! nada deve ser desfeito!
(veja: :help s_flagpara mais informações)
(Desta forma, funciona perfeitamente com " Pesquisar texto selecionado visualmente ", conforme descrito em vim-wikia tip171 )
usar
:% s / padrão / \ 0 / g
quando a string do padrão é muito longa e você não gosta de digitar tudo de novo.
Resposta curta :
:% s / string a ser pesquisada // gn
Para aprender :
Existem 3 modos no editor de VI como abaixo

:você está entrando Commandno Command-linemodo para . Agora, tudo o que você escreve depois :está na CLI (Command Line Interface)%sespecifica todas as linhas. Especificar o intervalo como %significa fazer a substituição em todo o arquivo. A sintaxe para todas as substituições de ocorrências é:%s/old-text/new-text/ggespecifica todas as ocorrências na linha. Com a gbandeira, você pode fazer com que toda a linha seja substituída. Se este gsinalizador não for usado, apenas a primeira ocorrência na linha será substituída.n especifica a saída do número de ocorrências //barra dupla representa a omissão de replacement text. Porque só queremos encontrar.Uma vez obtido o número de ocorrências, você pode pressionar a Ntecla para ver as ocorrências uma a uma.
Para encontrar e contar em determinado intervalo de número de linha 1 a 10:
: 1,10s / olá // gn
%que o arquivo inteiro é substituído por ,números de linha separados. Para localizar e substituir em uma faixa específica do número da linha 1 a 10:
: 1,10s / helo / hello / gn
Eu sugiro fazer:
*para fazer uma "pesquisa limitada" do que está sob o cursor ou fazer uma /patternpesquisa padrão .:%s///gnpara obter o número de ocorrências. Ou você pode usar :%s///npara obter o número de linhas com ocorrências.** Eu realmente poderia encontrar um plug-in que fornecesse a mensagem "corresponder N de N 1 em N 2 linhas" com cada pesquisa, mas, infelizmente.
Nota: Não se confunda com a formulação complicada da saída. O primeiro comando pode fornecer algo como 4 matches on 3 lineso último pode fornecer 3 matches on 3 lines. Embora tecnicamente preciso, o último é enganoso e deveria dizer 'correspondência de 3 linhas'. Então, como você pode ver, realmente nunca há necessidade de usar a última forma ('n' apenas). Você obtém as mesmas informações, mais claramente e mais usando o formulário 'gn'.
:g/xxxx/d) é terrível, perigosa e inferior a outras nesta página. Desmarque-o.