Ich habe eine Frage gefunden, wie man Zeilen mit einer Länge von mehr als 2048 Zeichen entfernt:
Wie lösche ich eine Zeile, die länger als XY ist?
F: Aber wie kann ich Zeilen entfernen, die kürzer als 4 Zeichen sind? Entfernen Sie also Zeilen mit einer Länge von 1, 2 oder 3 in einer Datei.
UPDATE: Danke für die vielen GUTEN Antworten, aber ich kann nur eine als OK markieren
quelle
sed '/^.\{,3\}$/d'
nicht mit BSD arbeiten sed:sed: 1: "/^.\{,3\}$/d": RE error: invalid repetition count(s)
. Die sed -r-Version ist syntaktisch gültig, entfernt jedoch keine Zeilen.Einige weitere Variationen:
oder
oder
oder
oder
oder GNU awk:
quelle
Hier ist die Vim-Lösung, die den Vim-Ex-Modus und den
global
Befehl verwendet.Dies ist der Verwendung von sehr ähnlich
sed
, nur dass einige Sonderzeichen ('{', '}') maskiert werden müssen.Mit Vims Very Magic Regex-Modus (\ v) kann dieses Entkommen vermieden werden.
Siehe auch: Hilf der Magie
Manchmal ist es auch nützlich, das Gegenteil zu tun
vglobal
.würde bis auf 3 Zeichen alles außer Zeilen löschen.
quelle
Um die Zeilen direkt zu entfernen, können Sie:
Oder BRE:
Wenn eine Zeile nicht aus 4 oder mehr Zeichen besteht, wird sie gelöscht.
Wenn Sie in der Befehlsersetzungs-Subshell das Obige ausführen, wird sichergestellt, dass
grep
ein Lesedeskriptor angezeigt wird, bevor cat mit dem Schreiben beginnt.<<HEREDOC
Außerdem wird dadurch sichergestellt, dass das Ergebnis gestreamt bleibt und keine Argumentlängenfehler verursacht.quelle
quelle
Sie können verwenden
grep
:Wenn Sie führende Leerzeichen in der Zeilenlänge zählen:
Wenn Sie in der Zeilenlänge keine führenden Leerzeichen zählen:
quelle