Mam w zwyczaju pisać jedną linię na zdanie, ponieważ zwykle kompiluję różne rzeczy do LaTexa lub piszę w innym formacie, w którym łamanie linii jest ignorowane. Używam pustej linii, aby wskazać początek nowego akapitu.
Teraz mam plik napisany w tym stylu, który chciałbym wysłać jako zwykły tekst. Chcę usunąć wszystkie pojedyncze łamanie linii, ale pozostawić nienaruszone podwójne łamanie linii. Oto co zrobiłem:
sed 's/$^/NEWLINE/' file.txt | awk '{printf "%s ",$0}' | sed 's/NEWLINE/\n\n/g' > linebreakfile.txt
Zastępuje to puste wiersze pewnym tekstem, który, jak jestem pewien, nie pojawia się w pliku: NEWLINE
a następnie usuwa wszystkie podziały wiersza za pomocą awk (znalazłem tę sztuczkę na niektórych stronach internetowych), a następnie zastępuje NEWLINE
s wymaganymi dwoma podziałami linii .
Wydaje się, że to długa, kręta droga do zrobienia całkiem prostej rzeczy. Czy istnieje prostszy sposób? Ponadto, gdyby istniał sposób na zastąpienie wielu spacji (które z jakiegoś powodu czasem się wkradają) pojedynczymi spacjami, to też byłoby dobrze.
Używam emacsa, więc jeśli jest jakaś sztuczka specyficzna dla emacsa, to dobrze, ale wolałbym zobaczyć wersję w wersji sed lub czystej awk.
tr -d "\n"
.