Как я могу удалить новую строку, если это последний символ в файле? - PullRequest
146 голосов
/ 31 октября 2009

У меня есть несколько файлов, которые я хотел бы удалить последней новой строкой, если это последний символ в файле. od -c показывает, что команда, которую я запускаю, записывает файл с новой строкой:

0013600   n   t  >  \n

Я попробовал несколько трюков с sed, но лучшее, что я мог придумать, это не делать трюк:

sed -e '$s/\(.*\)\n$/\1/' abc

Есть идеи, как это сделать?

Ответы [ 22 ]

0 голосов
/ 04 ноября 2013
sed -n "1 x;1 !H
$ {x;s/\n*$//p;}
" YourFile

Следует удалить все последние вхождения \ n в файле. Не работает с огромным файлом (из-за ограничения sed-буфера)

0 голосов
/ 22 июня 2012

У меня была похожая проблема, но я работал с файлом Windows, и мне нужно сохранить эти CRLF - мое решение для Linux:

sed 's/\r//g' orig | awk '{if (NR>1) printf("\r\n"); printf("%s",$0)}' > tweaked
...