Ersetzen Sie alle Leerzeichen durch Kommas in einer Textdatei


10

Ich muss alle Leerzeichen in meinem Text durch Kommas ersetzen. Ich verwende derzeit diese Zeile, aber sie funktioniert nicht: Ich erhalte als Ausgabe eine Textdatei, die genau der ursprünglichen entspricht:

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

Vielen Dank


sed 's / [[: blank:]] \ + /, / g'
— mug896

@ mug896 arbeitete für mich unter Ubuntu 18.04 Ich brauchte die doppelten eckigen Klammern und das \ vor dem +
— dmontaner

Antworten:


13

Mit sed:

sed -e 's/\s\+/,/g' orig.txt > modified.txt

Oder mit perl:

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

Bearbeiten: Um Zeilenumbrüche in Perl auszuschließen, können Sie ein doppeltes Negativ verwenden 's/[^\S\n]+/,/g'oder nur mit den Leerzeichen Ihrer Wahl übereinstimmen 's/[ \t\r\f]+/,/g'.


Vielen Dank, es gibt jedoch immer noch ein Problem: Ich möchte "next lines \ n" nicht durch ein Komma ersetzen, und der Befehl mit perl führt dies derzeit aus. Sie hat das Kommando, das Sie geschrieben haben, funktioniert immer noch nicht.
— aneuryzm

Entschuldigung, Sie müssen dem +Betreiber in sed entkommen. Ich habe gerade meine Antwort aktualisiert. Newlines sind Whitepsace in Perl, daher müssen Sie Ihre Whitepsace-Klasse manuell durchführen, wenn Sie sie nicht einschließen möchten. Dafür habe ich auch zwei Lösungen hinzugefügt.
— Caleb

12

Verwenden von tr:

tr -s '[:blank:]' ',' <file

Dadurch wird jedes horizontale Leerzeichen durch ein Komma ersetzt. Wiederholte Leerzeichen werden nur durch ein einziges Komma ersetzt.


-1
awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

Hier lautet der Dateiname Server. Er enthält den folgenden Inhalt.

Server1
Server2
Server3

Wenn wir den obigen Befehl verwenden, können wir die folgende Ausgabe erhalten.

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.