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


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


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.


-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]$ 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.