Zastąp wszystkie białe spacje przecinkami w pliku tekstowym

10

Muszę zastąpić wszystkie białe spacje w tekście przecinkami. Obecnie używam tej linii, ale to nie działa: otrzymuję jako wynik plik tekstowy, który jest dokładnie taki sam jak oryginalny:

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

dzięki

aneuryzm
źródło
sed 's / [[: blank:]] \ + /, / g'
mug896
@ mug896 pracował dla mnie na Ubuntu 18.04 Potrzebowałem podwójnych nawiasów kwadratowych i \ przed +
dmontaner

Odpowiedzi:

15

Z sed:

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

Lub z perl:

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

Edycja: Aby wykluczyć nowe wiersze w perlu, możesz użyć podwójnego negatywu 's/[^\S\n]+/,/g'lub dopasować tylko do wybranych białych znaków spacji 's/[ \t\r\f]+/,/g'.

Caleb
źródło
Dzięki, jednak wciąż jest problem: nie chcę zamieniać „następnych wierszy \ n” przecinkiem, a polecenie z perlem właśnie to robi. Ona rozkazała, że ​​napisałeś, to wciąż nie działa.
aneuryzm
Przepraszam, że musisz uciec od +operatora w sed, właśnie zaktualizowałem swoją odpowiedź. Newlines są białymi znakami w Perlu, więc będziesz musiał ręcznie wykonać klasę białych znaków, jeśli nie chcesz jej uwzględniać. Do tego dodałem dwa rozwiązania.
Caleb
13

Używanie tr:

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

Zastąpi wszelkie poziome białe znaki przecinkiem. Wszelkie powtarzające się białe znaki zostaną zastąpione tylko jednym przecinkiem.

Steven D.
źródło
-1
awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

Tutaj nazwa pliku to Serwery .. Zawiera poniższą treść ..

Server1
Server2
Server3

Jeśli użyjemy powyższego polecenia, możemy uzyskać poniższe dane wyjściowe.

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]$ 
użytkownik165585
źródło