Удалить новую строку из конца файла

Я хочу удалить новую строку \n только с конца файла в unix
например.

abc  
def  
ghi
​

вывод должен быть

abc  
def  
ghi

В конце файла не должно быть ни одного \n


person jn_sum    schedule 26.12.2011    source источник
comment
awk '{if (NR == 1 && $ 0 ~ / ›/) {print $ 0; next} if ($ 0 ~ / ^› /) {print \ n $ 0; next} else {printf (% s, $ 0)}} 'filename Я пробовал приведенный выше сценарий, но он удаляет все \ n, но я хочу, чтобы \ n, существующие в конце файла, были удалены.   -  person jn_sum    schedule 26.12.2011
comment
Какой язык? Какая платформа?   -  person Oded    schedule 26.12.2011
comment
unix, я пробовал с командным скриптом awk   -  person jn_sum    schedule 26.12.2011
comment
sed -i '$ d' filename, из данного скрипта я могу удалить \ n из конца файла, но только 1. В моем файле может быть несколько \ n в конце файла. Хочу убрать совсем.   -  person jn_sum    schedule 26.12.2011
comment
sed '/ ^ [[: space:]] * $ / {: a; $ d; N; / \ n [[: space:]] * $ / ba}' имя файла | awk '{if (flag) строка печати; строка = 0 $; flag = 1} END {printf line} 'Из данного скрипта я могу удалить несколько \ n из конца файла :-)   -  person jn_sum    schedule 26.12.2011
comment
опубликуйте свой комментарий в качестве ответа, и вы можете принять его, получив несколько очков репутации. (Вам нужно подождать X часов, чтобы получить очки). В будущем узнайте, как использовать более качественные теги, чтобы привлечь больше людей к вашему вопросу. (Наведите указатель мыши на свои теги и посмотрите количество пользователей, затем просмотрите счетчики для tag = awk tag = bash tag = sed). Удачи.   -  person shellter    schedule 26.12.2011
comment
возможный дубликат Как удалить новую строку, если это последний символ в файле?   -  person Luke Girvin    schedule 11.02.2012


Ответы (2)


Ты сможешь:

perl -pe 'chomp if eof' file1 > file2

Пример:

$ cat file1
abc
def
ghi
$ perl -pe 'chomp if eof' file1 > file2
$ cat file2
abc
def
ghi$ 
person Aleksandra Zalcman    schedule 26.12.2011
comment
Я не могу удалить \ n из файла из приведенного выше сценария - person jn_sum; 26.12.2011
comment
Обратите внимание: если file1 совпадает с file2, он может стереть файл. Имейте в виду. Со мной случилось. К счастью, я знал содержание. - person Steven Lu; 17.10.2013
comment
Я ожидал, что это не сработает, по крайней мере, ненадежно, потому что eof становится истинным только тогда, когда вы пытаетесь прочитать за концом файла, что не обязательно произошло в режиме -pe, когда $_ последняя строка файла. - person zwol; 28.12.2013

Как правило, текстовые инструменты Unix более удобны, если у вас действительно есть новая строка в конце последней строки файла. Зачем нужно его убирать?

Вы не можете сделать это (насколько я знаю) с awk, но с perl это легко:

perl -e 'undef $/; $_ = <>; s/\R\z//; print'

РЕДАКТИРОВАТЬ: Спустя годы мне пришло в голову, что вы могли иметь в виду «как мне удалить завершающие пустые строки из конца файла»; другими словами, вы могли захотеть сократить два или более последовательных символа новой строки до одной, только в конце файла. Опять же, это проще всего с perl:

perl -e 'undef $/; $_ = <>; s/\s+\z/\n/; print'

(Это приведет к удалению произвольных конечных символов пробелов, а не только символов новой строки. Это почти наверняка то, что вам нужно.)

person zwol    schedule 26.12.2011