você está aqui: Home  → Arquivo de Mensagens

Busca com grep em documentos editados com vim

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 25 de agosto de 2010

É fato bastante conhecido que eu consigo ler para dentro de um documento editado com vim informações obtidas a partir de comandos do Linux.

Por exemplo:

  :r!lynx -dump http://www.dicas-l.com.br/arquivo/palavras_mais_comuns_em_ingles.php

O comando acima colocará, dentro do arquivo que estou editando, o resultado do comando lynx -dump http://www.dicas-l.com.br/arquivo/palavras_mais_comuns_em_ingles.php. Da mesma forma, eu posso fazer qualquer tipo de processamento que eu quiser. Basta conhecer os comandos existentes no sistema e como usá-los apropriadamente.

Algo que faço com muita frequência é extrair de uma página html a url de arquivos que desejo baixar. O procedimento que eu usava era meio complicado e pouco inteligente.

Até que um dia, pensei em usar o grep para isto. Demorei anos para ter este insight, mas vamos lá.

Tomemos um arquivo que tenha milhares de endereços de email. Se eu quiser pegar apenas os endereços do domínio gmail.com, faço assim:

  :%!grep gmail.com

Pronto, do conteúdo integral do arquivo restarão apenas os endereços de email do domínio gmail.com. Posso então salvar o arquivo com um outro nome ou então salvar o arquivo original. Não se esqueça de dar um undo caso não deseje alterar o conteúdo do arquivo original. O caractere % indica que o processamento deve ser feito sobre todas as linhas. Eu posso substituir o caractere % por uma faixa de linhas ou por qualquer outra forma de endereçamento que o vim permita.

Existem diversas outras formas de se fazer isto. Esta maneira, com o grep invocado a partir do vim é apenas mais uma, e pode lhe economizar algum tempo na edição de arquivos.



 

 

Veja a relação completa dos artigos de Rubens Queiroz de Almeida

Opinião dos Leitores

Rubens Queiroz de Almeida
25 Ago 2010, 16:54
Renato, na verdade não é apenas para deletar. Você pode usar esta facilidade para diversas coisas. A intenção do texto foi alertar para uma facilidade, e cada um usa segundo sua necessidade. Nos editores de texto da IBM, ambiente mainframe, existia uma funcionalidade muito legal parecida, de exibir apenas linhas que atendiam a um determinado critério de busca. No vim também tem (fold), mas infelizmente é muito complicado e eu nunca me recordo. Esta dica é um substituto adequado e fácil de recordar. Obrigado por seu comentário :-)
Renato Botelho
25 Ago 2010, 11:09
Legal o artigo, mas não vejo porque usar um comando externo, no caso o grep, para fazer algo que o próprio vim faz.

Para deletar todas as linhas que contenham a string "gmail.com" basta você executar:

:g/gmail\.com/d

E para fazer o inverso, deletar tudo exceto as linhas que contenham a string "gmail.com" basta trocar o g por v, como segue:

:v/gmail\.com/d
Rubens Queiroz de Almeida
25 Ago 2010, 09:35
Alfredo,

hehe, realmente "ler para dentro" é uma expressão infeliz. Talvez o melhor fosse escrever algo como: "inserir no documento sendo editado o resultado do comando"

vou mudar o texto original. Obrigado pelo comentário, Rubens
Alfredo Pereira dos Santos
25 Ago 2010, 09:10
Gostei do artigo. Só não consegui entender o que significa "ler para dentro".

Obrigado.

Alfredo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script