Ich habe einige Textdateien, mit denen ich Notizen mache - einfach nur Text, normalerweise nur mit cat >> file
. Gelegentlich verwende ich ein oder zwei Leerzeilen (einfach zurück - das Zeichen für die neue Zeile), um ein neues Thema / eine neue Gedankenlinie anzugeben. Am Ende jeder Sitzung füge ich vor dem Schließen der Datei mit Ctrl+ Dnormalerweise viele (5-10) Leerzeilen (Return-Taste) hinzu, um die Sitzungen zu trennen.
Das ist natürlich nicht sehr klug, aber es funktioniert für mich zu diesem Zweck. Ich habe jedoch sehr viele unnötige Leerzeilen, daher suche ich nach einer Möglichkeit, die (meisten) zusätzlichen Zeilen zu entfernen. Gibt es einen Linux-Befehl (cut, paste, grep, ...?), Der mit ein paar Optionen direkt verwendet werden kann? Oder hat jemand eine Idee für ein sed-, awk- oder perl-Skript (auch in jeder anderen Skriptsprache, obwohl ich sed- oder awk-Skripts vorziehen würde), das tun würde, was ich will? Etwas in C ++ zu schreiben (was ich eigentlich selbst tun könnte), scheint einfach übertrieben.
Fall 1: Was ich brauche, ist ein Skript / Befehl, der mehr als zwei (3 oder mehr) aufeinanderfolgende Leerzeilen entfernt und durch nur zwei Leerzeilen ersetzt. Es wäre aber auch schön, wenn man mehr als eine Zeile (2 oder mehr) entfernen und / oder mehrere Leerzeilen durch nur eine Leerzeile ersetzen könnte.
Fall 2: Ich könnte auch ein Skript / einen Befehl verwenden, mit dem eine einzelne Leerzeile zwischen zwei Textzeilen entfernt wird, aber mehrere Leerzeilen unverändert bleiben (obwohl das Entfernen einer der Leerzeilen auch akzeptabel wäre).
vim
und sollte Leerzeilen durch eine Leerzeile ersetzen ).Antworten:
Fall 1:
Fall 2:
quelle
Sie können verwenden,
uniq
um mehrere Instanzen von Leerzeilen in eine Leerzeile zu reduzieren. Es werden jedoch auch Zeilen reduziert, die Text enthalten, wenn sie gleich und untereinander sind.quelle
Fall 1:
Fall 2:
quelle
Sie können Fall 1 wie folgt mit GNU sed ansprechen:
Das heißt, sammeln Sie leere Zeilen im Musterbereich, und reduzieren Sie sie auf zwei Zeilen, wenn mehr als drei oder mehr Zeilen vorhanden sind.
So fügen Sie Zeilen mit einfachem Abstand wie in Fall 2 zusammen:
Oder in kommentierter Form:
quelle
Diese Lösung berücksichtigt auch die letzten Leerzeilen in der Datei:
quelle
Auf Anthons Vorschlag, "uniq" zu verwenden ...
Entfernen Sie führende, nachfolgende und doppelte Leerzeilen.
In einer langen Reihe:
Oder benutze einfach "cat -s".
Ich habe von Klammern zu geschweiften Klammern gewechselt, um im aktuellen Shell-Kontext zu bleiben, von dem ich annehme, dass er effizienter ist. Beachten Sie, dass geschweifte Klammern nach dem letzten Befehl ein Semikolon und ein Leerzeichen zur Trennung benötigen.
In einer einzigen Zeile.
quelle
Die veröffentlichten Lösungen sahen für mich etwas kryptisch aus. Hier ist die Lösung in Python 3.6:
Sie können die Funktionen von einem Interpreter aufrufen oder wie folgt von der Shell aus ausführen:
quelle