Essa página aqui me deu a idéia de mostrar uma das coisas que mais gosto no VIM: massacrar logs (e outros arquivos maiores do que minha preguiça permite trabalhar manualmente).
Aqui nesse site aqui tem alguns exemplos de logs legais para brincar: http://www.monitorware.com/en/logsamples. Eu peguei os do PostFix (e-mail) para usar de exemplo.
Copiar todas as linhas com "reject:" para o final do arquivo
:g/reject:/t$
":g" executa comandos em todas as linhas em que a expressão regular der match. O comando "t" copia a linha para um certo endereço. "$" é o endereço para "fim do arquivo".
Se você quiser mover a linha ao invés de copiá-la, troque o "t" por "m".
Copiar todas as linhas com "reject:" para o registrador "a" (para colar onde quiser depois com "ap)
qaq (isso limpa o registrador "a")
:g/reject:/yA ("y" copia a linha e "A" adiciona ao registrador "a")ou
:g/reject:/normal "Ayy
Tudo o que vier a seguir do comando "normal" é tratado como instruções do VIM. Ou seja, no exemplo acima "Ayy adiciona a linha no registrador "a" da mesma maneira que você faria na edição normal do vi. "normal" é o comando mais cabeludamente ninja do VIM, pois permite que vocẽ execute macros nas linhas que deram match!.
Aí sim!!!!
Copiar as linhas com "Domain not found" para o final e ficar apenas com o endereço de destino
:g/Domain not found/t$ | s/.*to=<// | s/>.*//
Dá para separar comandos com "|" (pipe). No caso acima, dupliquei para o fim do arquivo e já removi começo e fim de linha que não interessavam. Quando as operações são mais complicadas, o pipe é indispensável ;)
É isso! Eu gosto de pensar no VIM não é um editor de textos, mas como um editor de código com uma linguagem de programação interativa (e suscinta) embutida :D
Nenhum comentário:
Postar um comentário