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

aneuryzm
quelle
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'.

Caleb
quelle
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.

Steven D.
quelle
-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]$ 
user165585
quelle