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 n
bandeira. Para contar palavras, use:
:%s/\i\+/&/gn
e uma palavra particular:
:%s/the/&/gn
Consulte a count-items
seçã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_flag
para 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 Command
no Command-line
modo para . Agora, tudo o que você escreve depois :
está na CLI (Command Line Interface)%s
especifica 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/g
g
especifica todas as ocorrências na linha. Com a g
bandeira, você pode fazer com que toda a linha seja substituída. Se este g
sinalizador 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 N
tecla 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 /pattern
pesquisa padrão .:%s///gn
para obter o número de ocorrências. Ou você pode usar :%s///n
para 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 lines
o ú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.