GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So löschen Sie leere Zeilen in Dateien mit Grep, Sed und Awk

Ein erfahrener Linux-Anwender weiß genau, was für lästige Leerzeilen in einer verarbeitbaren Datei sein können. Diese leeren/leeren Zeilen stehen nicht nur der korrekten Verarbeitung solcher Dateien im Wege, sondern erschweren auch einem laufenden Programm das Lesen und Schreiben der Datei.

In einer Linux-Betriebssystemumgebung ist es möglich, mehrere Textbearbeitungsausdrücke zu implementieren, um diese leeren/leeren Zeilen aus einer Datei zu entfernen. In diesem Artikel beziehen sich leere/leere Zeilen auf die Leerzeichen.

Erstellen Sie eine Datei mit leeren/leeren Zeilen in Linux

Wir müssen eine Referenzdatei mit einigen leeren/leeren Zeilen erstellen. Wir werden es später in dem Artikel durch mehrere Techniken, die wir besprechen werden, ändern. Erstellen Sie von Ihrem Terminal aus eine Textdatei Ihrer Wahl mit einem Namen wie „i_have_blanks “ und füllen Sie es mit einigen Daten und einigen Leerzeichen.

$ nano i_have_blanks.txt
Or
$ vi i_have_blanks.txt

Im gesamten Artikel werden wir den Inhalt einer Datei auf unserem Terminal ausgeben, indem wir den cat-Befehl für eine flexible Referenzierung verwenden.

$ cat i_have_blanks.txt

Die drei Linux-Befehle, die uns zu einer idealen Lösung für dieses Problem mit leeren/leeren Zeilen führen, sind grep, sed und awk .

Erstellen Sie daher drei Kopien Ihrer i_have_blanks.txt Datei und speichern Sie sie unter unterschiedlichen Namen, so dass jeder von einem der drei angegebenen Linux-Befehle berücksichtigt werden kann.

Durch regex (reguläre Ausdrücke ) können wir Leerzeilen mit dem POSIX-Standardzeichen “[:space:]” kennzeichnen .

So entfernen Sie Leerzeichen/leere Zeilen in Dateien

Mit dieser Problemstellung erwägen wir die Eliminierung aller vorhandenen leeren/leeren Zeilen aus einer gegebenen lesbaren Datei mit den folgenden Befehlen.

1. Löschen Sie leere Zeilen mit dem Grep-Befehl

Die unterstützte Verwendung von Kurzschrift-Zeichenklassen kann den grep-Befehl auf einen einfachen reduzieren wie:

$ grep -v '^[[:space:]]*$' i_have_blanks.txt
OR
$ grep '\S' i_have_blanks.txt

Um eine Datei mit Leerzeilen zu reparieren, muss die obige Ausgabe eine temporäre Datei durchlaufen, bevor die Originaldatei überschrieben wird.

$ grep '\S' i_have_blanks.txt > tmp.txt 
$ mv tmp.txt i_have_blanks.txt
$ cat i_have_blanks.txt

Wie Sie sehen können, sind alle Leerzeilen, die den Inhalt dieser Textdatei getrennt haben, verschwunden.

2. Löschen Sie leere Zeilen mit dem Sed-Befehl

Das d Aktion im Befehl weist ihn an, alle vorhandenen Leerzeichen aus einer Datei zu löschen. Der Mechanismus zum Abgleichen und Löschen von Leerzeilen dieses Befehls kann folgendermaßen dargestellt werden.

$ sed '/^[[:space:]]*$/d' i_have_blanks_too.txt

Der obige Befehl durchsucht die Textdateizeilen nach Nicht-Leerzeichen und löscht alle anderen verbleibenden Zeichen. Durch die Unterstützung von Zeichenklassen ohne Leerzeichen kann der obige Befehl wie folgt vereinfacht werden:

$ sed '/\S/!d' i_have_blanks_too.txt

Aufgrund der direkten Bearbeitungsunterstützung des Befehls benötigen wir außerdem keine temporäre Datei, um unsere konvertierte Datei vorübergehend zu speichern, bevor wir die ursprüngliche Textdatei überschreiben, wie im Fall des grep-Befehls. Sie müssen diesen Befehl jedoch mit einem -i verwenden Option als Argument.

$ sed -i '/\S/!d' i_have_blanks_too.txt i_have_blanks_too.txt 
$ cat i_have_blanks_too.txt

3. Leere Zeilen mit dem Awk-Befehl löschen

Der awk-Befehl führt eine Prüfung auf nicht weiße Zeichen für jede Zeile einer Datei durch und druckt sie nur, wenn diese Bedingung wahr ist. Die Flexibilität dieses Befehls ergibt sich aus verschiedenen Implementierungsrouten. Die einfache Lösung lautet wie folgt:

$ awk '!/^[[:space:]]*$/' i_have_blanks_first.txt

Die Interpretation des obigen Befehls ist einfach, es werden nur die Dateizeilen gedruckt, die nicht als Leerzeichen vorhanden sind. Die längere Version des obigen Befehls sieht etwa so aus:

$ awk '{ if($0 !~ /^[[:space:]]*$/) }' i_have_blanks_first.txt

Durch awk Nicht-Leerzeichen-Klassenunterstützung, der obige Befehl kann auch auf folgende Weise dargestellt werden:

$ awk -d '/\S/' i_have_blanks_first.txt

Das -d eine Option lässt awk geben Sie die letzten Dateizeilen auf dem Systemterminal aus. Wie Sie sehen, enthält die Datei keine Leerzeichen mehr.

Die drei diskutierten und implementierten Lösungen zum Umgang mit Leerzeilen aus Dateien durch grep , sed und awk Befehle werden uns einen langen Weg zur Implementierung stabiler und effizienter Lese- und Schreiboperationen für Dateien auf einem Linux-System bringen.


Linux
  1. So verschlüsseln und entschlüsseln Sie Dateien/Ordner in Linux mit GnuPG

  2. So finden und löschen Sie leere Verzeichnisse und Dateien in Linux

  3. Entfernen Sie leere Zeilen in einer Textdatei mit grep

  4. Wie kann man zwei Dateien mit AWK zusammenführen?

  5. Wie ändere ich eine Datei direkt mit awk? (wie bei sed -i)

So kürzen Sie (leere) Dateien in Linux

So löschen Sie Dateien und Verzeichnisse in Linux über die Befehlszeile

Alles über Tar-Dateien und wie man Dateien in Linux mit Terminal tart und enttarnt

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

So löschen Sie Dateien und Verzeichnisse mit der Linux-Befehlszeile

Unix Sed Tutorial:Löschen Sie Dateizeilen mit Adresse und Mustern