So entfernen Sie die leeren/leeren Zeilen aus Dateien, die als @ von vi angezeigt werden

So entfernen Sie die leeren/leeren Zeilen aus Dateien, die als @ von vi angezeigt werden

wenn ich die Datei mit vi öffne

als

vi file

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

aber ich versuche diese leere Zeile zu löschen

als

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

oder

sed -i '/^$/d'  file

oder

sed -i '/^$/d' file

noch immer ist die Datei mit den leeren Zeilen

Wie entferne ich die leeren/leeren Zeilen?

Antwort1

Jene sindnichtleere Zeilen, aber Zeilen, die zu lang sind, um auf den Bildschirm zu passen, selbst nach dem Umbrechen.

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

foo
@
@
@
...

Das ist, was dieStandardsagt:

Wenn im visuellen Modus eine Zeile aus dem Editierpuffer (mit Ausnahme der aktuellen Zeile) nicht vollständig in die Zeilen am unteren Rand der Anzeige passt, die für ihre Darstellung zur Verfügung stehen, kann der Editor entscheiden, einen Teil der Zeile nicht anzuzeigen. Die Zeilen der Anzeige, die aus diesem Grund keinen Text aus dem Editierpuffer enthalten, müssen jeweils aus einem einzelnen „@“-Zeichen bestehen.

Sehen Sie sich auch die vimDokumentation zu dieser displayOption an:

Wenn weder „lastline“ noch „truncate“ enthalten ist, wird die letzte Zeile, die nicht passt, durch „@“-Zeilen ersetzt.

Verwechseln Sie sie nicht mit Nullbytes, die normalerweise als angezeigt werden ^@(beachten Sie das Zirkumflex). Außerdem ist dieses Verhalten nicht universell (es scheint in nicht implementiert zu sein nvi).

Antwort2

Bei mir funktioniert es gut. Wahrscheinlich sollte Ihre Datei DOS-Nullwerte enthalten ...

Sehen:

vim -b file

So konvertieren Sie nach Unix

dos2unix file

Antwort3

Das sind Nullbytes, glaube ich. cat -A filewürde sie anzeigen als^@

trkann damit umgehen:

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

verwandte Informationen