Usando sed dentro de um buffer vi

3

Em um longo arquivo de texto listando dups-23Mar16.listing eu quero excluir linhas começando, por exemplo, com .local . Aqui estão algumas linhas neste arquivo:

Desktop/Reisen/Italien/VillaLaBandita/images-hpz-urlaub/cimg0429.jpg
Desktop/Tiere/Italien/VillaLaBandita/images-hpz-urlaub/cimg0429.jpg
.local/share/files/eksteuer/ekst.odt

De fora desse arquivo, posso fazer isso com o comando

sed  -e '/^\.[a-z]/d' dups-23Mar16.listing

e em um buffer vi por

:%!sed  -e '/^\.[a-z]/d'

Se eu quiser remover as linhas que começam com o Desktop, também obtenho sucesso

:%!sed  -e '/^Desktop/d'

Como posso combinar os dois comandos em um? Eu tentei

:%!(sed  -e '/^\.[a-z]/d';sed -e '/^Desktop/d')

mas isso não funciona. Qual é a solução?

    
por Lermontov 24.03.2016 / 19:00

2 respostas

6

Se você realmente quiser isso, pode simplesmente fornecer vários parâmetros -e para sed desta forma:

:%!sed -e '/^\.[a-z]/d' -e '/^Desktop/d'

Eu só não sei se você quer isso apenas por alguma experiência em sed ou você não está ciente de que dentro do vim , há ed que sabe tudo que o sed faz e mais ... e sem iniciar um processo desnecessário:

g/^\(\.[a-z]\|Desktop\)/d
    
por 24.03.2016 / 19:23
1

Se você quiser fazer isso na linha de comando do vi buffer, isso deve funcionar - sem sed:

:exe 'g/^Desktop/d'|g/^\.[a-z]/d

A barra vertical separa vários comandos em uma linha de comando do vi. O g trabalha para processar o buffer inteiro, pois as expressões regulares devem qualificar os comandos de exclusão para trabalhar com todas as linhas correspondentes. O exe e aspas são necessários para evitar um erro de recursão global.

    
por 24.03.2016 / 20:12