Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
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.
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
25 Ago 2010, 16:54
25 Ago 2010, 11:09
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
25 Ago 2010, 09:35
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
25 Ago 2010, 09:10
Obrigado.
Alfredo



