Talvez algo como:
awk '!NF || /%/ {printf "%s", (NR > 1 ? "\n" : "") $0; sep = "\n"; next}
{printf "%s", sep $0; sep = " "}
END {if (NR) print ""}' < file.in > file.out
Observação: estou trabalhando com o arquivo .tex
(TeX).
No código TeX, a quebra de linha não afeta a saída. Para produzir um novo parágrafo, temos que usar o comando \par
.
Alguns editores do TeX interpretam uma linha em branco como \par
. Então o seguinte código
line one here
continues here and so on
New paragraph here
produz a saída
line one here continues here and so on
New paragraph here
Como alguns editores podem agrupar linhas longas automaticamente, gosto de escrever meus códigos com menos RETURN possível. Isso é melhor quando queremos cuidar dos números de linha.
Veja a captura de tela:
Gostariaderemoverofinaldaslinhas,masmanteraslinhasembrancomesmoquecontenhamapenasespaçosembranco.Apósoprocesso,eugostariadomeucódigoassim:
Note que o novo código contém apenas 3 linhas.
Eu tentei usar tr
, mas não obtive sucesso.
Editar: depois de testar o código sugerido por @ lcd047, notei que alguns problemas aparecem quando a linha n
contém %
( %
é usada para comentar no TeX e tudo depois na linha é ignorado).
Então, acho que devo adicionar a solicitação : se a linha n
contiver %
não cole n
com n-1
nem cole n+1
com n
.
Tente isto:
perl -lpe 'BEGIN{ $/= $\ = "\n\n" } s/^[^%]+?\K\n/ /gmo' <file_old.tex >file_new.tex
Para deixar as linhas sozinhas com comandos:
perl -lpe 'BEGIN{ $/= $\ = "\n\n" } s/^\s*[^\s\%][^%]*?\K\n/ /gmo' <file_old.tex >file_new.tex
Observe, no entanto, que algumas das pessoas que revisaram seus artigos irão odiá-lo com paixão por esse movimento.