как удалить пустые строки из файлов, которые отображаются как @ из vi

как удалить пустые строки из файлов, которые отображаются как @ из vi

когда я открываю файл с помощью vi

как

vi file

Current partition replica assignment
@
@
@
@
@
{"version":1,"partitions":[{"topic")]
@
@
@
@
@
Proposed partition reassignment configuration

но я пытаюсь удалить эту пустую строку

как

sed -i 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file

или

sed -i '/^$/d'  file

или

sed -i '/^$/d' file

файл все еще с пустыми строками

как удалить пустые строки?

решение1

Этонетпустые строки, но строки, которые слишком длинные, чтобы поместиться на экране, даже после переноса.

$ perl -e 'print "foo\n", "bar " x 4096' >/tmp/file
$ vim /tmp/file

foo
@
@
@
...

Это то, чтостандартныйговорит:

В визуальном режиме, если строка из буфера редактирования (кроме текущей строки) не полностью помещается в строки в нижней части дисплея, доступные для ее представления, редактор может решить не отображать какую-либо часть строки. Строки дисплея, которые по этой причине не содержат текст из буфера редактирования, должны состоять из одного символа '@'.

Также ознакомьтесь с vimдокументацией об этой displayопции:

Если не указаны ни «lastline», ни «truncate», последняя неуместная строка заменяется строками «@».

Не путайте их с нулевыми байтами, которые обычно отображаются как ^@(обратите внимание на каретку). Кроме того, это поведение не является универсальным (кажется, оно не реализовано в nvi).

решение2

У меня это работает хорошо. Вероятно, ваш файл должен иметь значения dos null...

Смотреть:

vim -b file

Для конвертации в Unix

dos2unix file

решение3

Я полагаю, что это нулевые байты. cat -A fileотобразит их как^@

trможет справиться с этим:

tr -d '\0' < file > file.new

Связанный контент