Tenho o hábito de escrever uma linha por frase, porque normalmente compilo coisas para o LaTex ou estou escrevendo em outro formato no qual as quebras de linha são ignoradas. Eu uso uma linha em branco para indicar o início de um novo parágrafo.
Agora, eu tenho um arquivo escrito neste estilo que gostaria de enviar como texto sem formatação. Quero remover todas as quebras de linha únicas, mas deixar intactas as quebras de linha duplas. Isto é o que eu fiz:
sed 's/$^/NEWLINE/' file.txt | awk '{printf "%s ",$0}' | sed 's/NEWLINE/\n\n/g' > linebreakfile.txt
Isso substitui as linhas vazias por algum texto que, confiante, não apareça no arquivo: NEWLINE
depois, ele se livra de todas as quebras de linha com awk (achei esse truque em algum site) e, em seguida, substitui NEWLINE
s com as duas quebras de linha necessárias .
Parece uma maneira muito complicada de fazer uma coisa bem simples. Existe uma maneira mais simples? Além disso, se houvesse uma maneira de substituir vários espaços (que às vezes se arrastam por algum motivo) por espaços únicos, isso também seria bom.
Eu uso o emacs, por isso, se houver algum truque específico do emacs que seja bom, mas prefiro ver uma versão pura sed ou awk pura.
tr -d "\n"
.