Die Debatte über die Verwendung von Tabulatoren und Leerzeichen in der Programmierung ist endlos.
Auch wenn Sie die Verwendung von Tabulatoren bevorzugen, besteht die Möglichkeit, dass Ihre Kodierungsrichtlinie die Verwendung von Leerzeichen vorschlägt.
Aber wenn Sie bereits überall in Ihrem Programm Tabulatoren verwendet haben und diese Tabulatoren in Leerzeichen umwandeln müssen, damit der Überprüfer Ihren Code zulässt, sind Sie hier richtig.
In diesem Tutorial zeige ich Ihnen, wie Sie die Tabulatoren in einer Textdatei in der Linux-Befehlszeile in Leerzeichen umwandeln.
Verwenden des Erweiterungsbefehls zum Konvertieren von Tabulatoren in Leerzeichen in der Linux-Befehlszeile
Ich verwende diese Beispieltextdatei, die ein einfaches C++-Programm zum Überprüfen ungerader und gerader Zahlen ist. Dies ist der Inhalt der Datei:

Sie können diese Datei hier herunterladen, wenn Sie den Befehl üben möchten, während Sie diesem Tutorial folgen.
Überprüfen Sie, ob Ihre Textdatei Tabs hat
Es gibt mehrere Möglichkeiten, dies zu tun. Die einfachste Methode, die ich finde, ist die Verwendung des cat-Befehls.
Sie können den cat-Befehl mit der Option -T verwenden und werden alle Tabs als ^I auf dem Bildschirm (stdout) anzeigen.
cat -T tab_file
Sie können die Position der Registerkarten in der Datei sehen.
#include
using namespace std;
int main()
{
^Iint n;
^Icout << “Enter a number:^I“;
^Icin >> n;
^I
^Iif (n%2 == 0) {
^I^Icout<<n<< “is an even Number”;
^I}
^Ielse
^I^Icout<<n<< “is an odd Number”;
^Ireturn 0;
}

Tabs mit dem Erweiterungsbefehl in Leerzeichen umwandeln
Wenn Sie den Erweiterungsbefehl für eine Datei verwenden, werden alle Tabulatoren in einen Block mit 8 Leerzeichen umgewandelt und die Ausgabe auf dem Bildschirm angezeigt.
expand tab_file
Aber das ist nicht sehr bequem, oder? Sie werden die Änderungen hier kaum sehen. Eine bessere Idee wäre, die Ausgabe in einer anderen Datei zu speichern.
expand tab_file > space_file
Wenn Sie die Datei jetzt mit dem cat-Befehl sehen, werden Sie keine Registerkarten mehr finden.

Reduzieren Sie die Anzahl der Leerzeichen
Wie ich im vorherigen Abschnitt erwähnt habe, entspricht ein Tabulator standardmäßig 8 Leerzeichen. Das würde super komisch aussehen, wenn Ihr Code so große Einrückungen hat.
Das Gute daran ist, dass Sie die Standardgröße des Speicherplatzes mit der Option -t ändern können.
expand -t N tab_file
Wenn Sie beispielsweise jeden Tabulator in 2 Leerzeichen ändern müssen, können Sie den Erweiterungsbefehl wie folgt verwenden:
expand -t2 tab_file > space_file

Nur führende Tabulatoren in Leerzeichen umwandeln
Oft möchte man in den Programmen nur die führenden Tabulatoren umwandeln, also die Tabulatoren am Zeilenanfang. Sie möchten nicht die Tabulatoren zwischen den Zeilen berühren, die eigentlich Teil des Codes sind.
Expand bietet diese Option ebenfalls. Wenn Sie nur die führenden Tabulatoren in Leerzeichen umwandeln möchten, verwenden Sie die –i-Option .
Wenn wir das vorherige Beispiel fortsetzen, sieht der Befehl so aus:
expand -t2 -i tab_file > space_file

Tabs in Leerzeichen umwandeln und in der Originaldatei speichern
In allen obigen Beispielen haben Sie die konvertierte Datei in einer neuen Datei gespeichert. Aber wenn Ihr Ziel darin besteht, Ihren Code zu bereinigen, indem Sie die Tabulatoren in Leerzeichen der vorhandenen Programmdateien umwandeln, möchten Sie, dass die Ausgabe in der Originaldatei selbst gespeichert wird.
Dazu können Sie den Schwammbefehl verwenden. Sponge „saugt“ die gesamte Standardeingabe auf, bevor sie in die Ausgabe geschrieben wird. Dies ist äußerst nützlich, wenn Sie versuchen, dieselbe Datei zu ändern und zu speichern.
Jetzt ist der Schwammbefehl möglicherweise nicht auf Ihrem System verfügbar. Sie müssen das moreutils-Paket installieren. Es sollte verfügbar sein
Auf Ubuntu/Debian-basierten Distributionen können Sie diesen Befehl verwenden, um moreutils zu installieren:
sudo apt install moreutils
Einmal installiert, können Sie es in der folgenden Funktion verwenden:
expand -t2 -i tab_file | sponge tab_file
Tabs in Leerzeichen in allen übereinstimmenden Dateien in einem Verzeichnis umwandeln
Was Sie bisher gelernt haben, war auf eine einzelne Datei anwendbar. Aber wenn Sie ein Projekt mit mehreren Programmdateien haben und in allen die Tabulatoren in Leerzeichen umwandeln möchten, müssen Sie hier etwas cleverer sein.
Was wir bisher gelernt haben, kann mit den großartigen Find- und Exec-Befehlen kombiniert werden.
find . -name '*.cpp' -type f -exec bash -c 'expand -t 4 "$0" | sponge "$0"' {} \;
Der obige Befehl findet alle Dateien, die mit der Erweiterung cpp enden, übergibt diese Dateien an den expand-Befehl und der expand-Befehl schreibt die Ausgabe mit Hilfe des sponge-Befehls in die Originaldateien.
Sie denken vielleicht, dass die Verwendung des Befehls sed an dieser Stelle einfacher gewesen wäre, aber das ist ganz Ihre Entscheidung.