Remova 2 e 3 novas linhas em um arquivo de texto, mas não 1

1

Estou desenvolvendo em um max osx 10.8 e não tenho preferências para qual ferramenta usar provavelmente sed , mas isso não importa.

Atualizar após comentário: O arquivo de entrada usa novas linhas do Windows, se isso é complica as coisas que eu posso pré-processá-los para mudar as novas linhas para o estilo linux.

Text

Text



text


text

text

E eu gostaria de um arquivo de saída como este

Text

Text
text
text

text
    
por Farmor 12.08.2013 / 18:28

2 respostas

1

Ou uma variante de perl:

perl -e 'undef $/; $_=<>; s/^\n{2,}//mg; print' < infile

unset ( undef ) o separador de campo ( $/ ). Isso faz com que $_=<> atribua o conteúdo de STDIN em $_ . Em seguida, pesquise e substitua 2 ou mais novas linhas com nada ( s/^\n{2,}//mg; ) e print da saída (essas operações são feitas em $_ ). A opção m na pesquisa s/// acima permite correspondência de nova linha (linha múltipla) e g aplica o padrão para todas as ocorrências na sequência (e não apenas na primeira).

Se for para trabalhar apenas em 2 e 3 novas linhas (e não efetuar 4 ou 5 etc), use s/^\n{2,3}//mg;

Para arquivo de formato DOS:

perl -e 'undef $/; $_=<>; s/^(\r\n){2,}//mg; print' < infile
    
por 12.08.2013 / 23:20
1
awk -vRS='\r\n' -vORS='\r\n' '
  /./||!++n{if (n==1) print "";print;n=0}
  END{if (n==1) print ""}'
    
por 12.08.2013 / 23:03