perl -pe 'chomp if eof' filename >filename2
nebo pro úpravu souboru na místě:
perl -pi -e 'chomp if eof' filename
Na webu awk, který jsem viděl, to bylo popsáno jako 'perlské rouhání'.
Ale v testu to fungovalo.
Můžete využít toho, že náhrady příkazů shellu odstraňují znaky na konci nového řádku :
Jednoduchý formulář, který funguje v bash, ksh, zsh:
printf %s "$(< in.txt)" > out.txt
Přenosná alternativa (v souladu s POSIX) (o něco méně efektivní):
printf %s "$(cat in.txt)" > out.txt
Poznámka:
- Pokud in.txtkončí na více znaky nového řádku, substituce příkazu odstraní vše z nicha . (Neodstraňuje mezery jiné než koncové nové řádky.)
- Protože tento přístup přečte celý vstupní soubor do paměti , je vhodné pouze pro menší soubory.
- printf %szajišťuje, že k výstupu není připojen žádný nový řádek (je to alternativa kompatibilní s POSIX k nestandardnímu- echo -n; viz http://pubs.opengroup.org/onlinepubs/009696799/utilities/echo.html a https://unix.stackexchange.com/a/65819)
Průvodce dalšími odpověďmi :
-  Pokud Perl je k dispozici, přejděte na přijatou odpověď – je jednoduchá a nenáročná na paměť (nečte celý vstupní soubor najednou). 
-  V opačném případě zvažte Awk od ghostdog74 odpověď – je to obskurní, ale také paměťově efektivní; čitelnější ekvivalent (vyhovující POSIX) je: 
-  awk 'NR > 1 { print prev } { prev=$0 } END { ORS=""; print }' in.txt
-  Tisk je zpožděn o jeden řádek, takže poslední řádek lze zpracovat v ENDbloku, kde se vytiskne bez koncového\nkvůli nastavení oddělovače výstupního záznamu (OFS) na prázdný řetězec.
-  Pokud chcete podrobné, ale rychlé a robustní řešení, které skutečně upraví na místě (na rozdíl od vytvoření dočasného souboru, který pak nahradí původní), zvažte skript Perl jrockway .