Ich habe einige Textdateien, die einige Spalten enthalten, die durch eine unterschiedliche Anzahl von Leerzeichen voneinander getrennt sind. Stattdessen benötige ich einen einzelnen Tabulator als Trennzeichen. Ist es möglich, in Bash zu tun?
linux
bash
text-manipulation
Benutzer unbekannt
quelle
quelle
Antworten:
So konvertieren Sie Sequenzen von mehr als einem Leerzeichen in einen Tabulator, lassen jedoch einzelne Leerzeichen in Ruhe :
So führen Sie dies für eine Reihe von Dateien aus:
oder
oder
quelle
sed: -e expression #1, char 1: unknown command: `.'
find
unten.sed
möchte kein Leerzeichen vor der Backup-Erweiterung haben. Ich habe meine Antwort bearbeitet. Danke für den Bericht.Wenn Ihr Charakter aus mehreren Registerkarten besteht, können Sie auch Folgendes verwenden
tr -s
:Beispielsweise:
Alle Leerzeichen werden eins.
quelle
Sie können verwenden
sed
, um mehrere Leerzeichen durch einen Tabulator zu ersetzen:Beispiel zum Ersetzen von einem oder mehreren Leerzeichen durch eine Registerkarte:
quelle
Die einfachste Antwort
bash
lautet:Wenn es eine variable Anzahl von Spalten gibt, können Sie dies tun, aber es funktioniert nur in
bash
, nicht insh
:z.B
produziert:
(Es gibt jeweils einen Tabulator dazwischen, aber es ist schwer zu erkennen, wann ich ihn hier einfügen möchte.)
Sie können dies auch mit
sed
oder tun. Beachten Sietr
jedoch, dass der Umgang mit Leerzeichen zu Beginn zu unterschiedlichen Ergebnissen führt.sed:
tr:
quelle
perl -p -i -e 's/\s+/\t/g' *.txt
quelle
Versuchen Sie folgendes SED-Skript:
Wobei <TAB> die TAB-Taste drückt.
quelle
Dies ist eine sehr einfache Lösung:
sed funktioniert grundsätzlich auf diese Weise (sed 's / old_pattern / new_pattern / g'). In diesem Fall ist das alte Muster "\ s +", was bedeutet, dass "s" einmal oder mehrmals "+" und der umgekehrte Schrägstrich "\" als regulärer Ausdruck interpretiert werden.
Das neue Muster ist die Registerkarte "\ t", die im regulären Ausdrucksformat geschrieben ist, und das "g" wendet die Ersetzung auf alle Zeilen "global" an.
quelle