Удалите последнюю пустую строку из текстового файла, содержащего абзацы, используя GNU SED v4.2.1 на платформе Windows 7

У меня есть много текстовых файлов, которые содержат блоки текста, разделенные пустыми строками, и мне нужно удалить только самый последний CR-LF в файле, удалив последнюю пустую строку. В качестве примера файлы имеют следующую форму:

qwerty
asdfgh
<empty line>
zxcvbn
jklmnb
<last empty line>

Windows SED ведет себя иначе, чем Unix SED. Кавычки должны быть двойными, и "s/\n//g" не удаляет символы \ n. Чтобы удалить их, весь файл должен быть прочитан в буфер шаблонов, прежде чем его можно будет редактировать. Например:

sed ":a;N;$!ba;s/\n//g" input.txt

удаляет все символы \ n на платформе Windows, оставляя одну строку текста, за которой следует пустая строка.

sed -e :a -e "/^\n*$/{$d;N;ba" -e "}" input.txt

удаляет все завершающие пустые строки в конце файла на платформе Unix, но не на платформе Windows.

Однако до сих пор мне не удалось найти решение, которое удаляет только последний \ n. Может кто-нибудь, пожалуйста, помогите?

0 ответов

Другие вопросы по тегам