it-swarm.com.de

Ersetzen Sie Leerzeichen durch ein Komma in einer Textdatei in Linux

Ich muss einige Textdateien bearbeiten (eine Ausgabe von sar) und diese in CSV-Dateien konvertieren.

Ich muss jeden Whitespace (vielleicht ein Tabulator zwischen den Zahlen in der Ausgabe) mit sed- oder awk-Funktionen (einem einfachen Shell-Skript in Linux) ändern.

Kann mir jemand helfen? Jeder Befehl, den ich verwendete, änderte die Datei überhaupt nicht. Ich habe gsub ausprobiert.

51
aye
tr ' ' ',' <input >output 

Ersetzt jedes Leerzeichen durch ein Komma. Falls erforderlich, können Sie mit dem Flag -s (Squeeze-Wiederholungen) einen Durchlauf durchführen, der jede Eingabesequenz eines sich wiederholenden Zeichens, das in SET1 (das Leerzeichen) aufgeführt ist, durch ein einziges Vorkommen ersetzt Charakter.

Verwendung von Squeeze-Wiederholungen, die nach Ersatz-Registerkarten verwendet wurden:

tr -s '\t' <input | tr '\t' ',' >output 
74

Versuchen Sie etwas wie:

sed 's/[:space:]+/,/g' orig.txt > modified.txt

Die Zeichenklasse [: space:] entspricht allen Leerzeichen (Leerzeichen, Tabulatoren usw.). Wenn Sie nur ein einzelnes Zeichen ersetzen möchten, z. Nur Platz, nur das verwenden.

BEARBEITEN: Eigentlich [: Leerzeichen:] schließt Wagenrücklauf ein, so dass dies möglicherweise nicht das tut, was Sie möchten. Folgendes ersetzt Tabulatoren und Leerzeichen.

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

als Wille

sed 's/[\t ]+/,/g' orig.txt > modified.txt

Bei all dem müssen Sie darauf achten, dass die durch Leerzeichen getrennten Elemente in Ihrer Datei keinen eigenen Leerraum enthalten, den Sie behalten möchten, z. zwei Wörter.

26
dave

ohne auf Ihre Eingabedatei zu schauen, nur eine Vermutung

awk '{$1=$1}1' OFS=","

zu einer anderen Datei umleiten und bei Bedarf umbenennen

21
ghostdog74

Was ist mit so etwas:

cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt

(Ja, mit etwas nutzlosem Catting und Piping; könnte auch <verwenden, um direkt aus der Datei zu lesen, nehme ich an - benutzte zuerst cat, um den Inhalt der Datei auszugeben, und erst danach fügte ich der Befehlszeile sed hinzu )

EDIT: Wie @ ghostdog74 in einem Kommentar hervorhebt, ist die Katze/Pfeife definitiv nicht nötig. Sie können den Namen der Datei an sed angeben:

sed -e 's/\s/,/g' texte.txt > texte-new.txt

Wenn "texte.txt" so ist:

$ cat texte.txt
this is a text
in which I want to replace
spaces by commas

Sie erhalten eine "texte-new.txt", die folgendermaßen aussieht:

$ cat texte-new.txt
this,is,a,text
in,which,I,want,to,replace
spaces,by,commas

Ich würde nicht einfach die alte Datei durch die neue Datei ersetzen (könnte mit sed -i gemacht werden, wenn ich mich recht erinnere; und wie @ ghostdog74 gesagt hat, würde dies die sofortige Erstellung des Backups akzeptieren): Halten könnte als eine Sicherheitsmaßnahme sinnvoll sein (auch wenn es bedeutet, es in etwas wie "texte-backup.txt" umzubenennen)

9
Pascal MARTIN

Dieser Befehl sollte funktionieren:

sed "s/\s/,/g" < infile.txt > outfile.txt

Beachten Sie, dass Sie die Ausgabe in eine neue Datei umleiten müssen. Die Eingabedatei wird nicht geändert.

7
Dawie Strauss

sed kann das:

sed 's/[\t ]/,/g' input.file

Das wird an die Konsole senden, 

sed -i 's/[\t ]/,/g' input.file

wird die Datei direkt bearbeiten

5
ezpz

Hier ist ein Perl-Skript, das die Dateien direkt bearbeitet:

Perl -i.bak -lpe 's/\s+/,/g' files*

Aufeinanderfolgende Leerzeichen werden in ein einzelnes Komma umgewandelt.
Jede Eingabedatei wird nach .bak verschoben

Diese Befehlszeilenoptionen werden verwendet: 

  • -i.bak direkt bearbeiten und .bak-Kopien erstellen

  • -p Schleife um jede Zeile der Eingabedatei, drucken Sie die Zeile automatisch aus

  • -l entfernt Zeilenumbrüche vor der Verarbeitung und fügt sie anschließend wieder ein

  • -e den Perlcode ausführen

3
Chris Koknat

Wenn Sie eine beliebige Folge von Leerzeichen (Tabulatorzeichen, Leerzeichen) durch ein Komma ersetzen möchten, verwenden Sie Folgendes:

sed 's/[\t ]+/,/g' input_file > output_file

oder

sed -r 's/[[:blank:]]+/,/g' input_file > output_file

Wenn einige Ihrer Eingabezeilen führende Leerzeichen enthalten, die redundant sind und nicht in Kommas konvertiert werden müssen, müssen Sie sie zuerst entfernen und die verbleibenden Leerzeichen in Kommas konvertieren. Verwenden Sie für diesen Fall Folgendes:

sed 's/ +//' input_file | sed 's/[\t ]+/,/g' > output_file
0
H.Alzy