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
@
@
@
...

これが標準言う:

ビジュアル モードでは、編集バッファの行 (現在の行以外) が、表示可能なディスプレイの下部の行に完全に収まらない場合、エディタは行のどの部分も表示しないことを選択できます。この理由により編集バッファからのテキストを含まないディスプレイの行は、それぞれ 1 つの '@' 文字で構成されます。

vimオプションに関する のドキュメントも参照してくださいdisplay

「lastline」も「truncate」も含まれていない場合、収まらない最後の行は「@」行に置き換えられます。

これらを、通常は として表示される null バイトと混同しないでください^@(キャレットに注意してください)。また、この動作は普遍的ではありません ( では実装されていないようですnvi)。

答え2

私にとってはうまく動作します。おそらく、ファイルには dos null 値が含まれているはずです...

表示するには:

vim -b file

UNIXに変換するには

dos2unix file

答え3

これらはヌルバイトだと思います。 cat -A file次のように表示されます。^@

trこれらを処理できます:

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

関連情報