Substitua todos os espaços em branco por vírgulas em um arquivo de texto

10

Preciso substituir todos os espaços em branco dentro do meu texto por vírgulas. Atualmente, estou usando esta linha, mas ela não funciona: recebo como saída um arquivo de texto que é exatamente igual ao original:

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

obrigado

aneuryzm
fonte
sed 's / [[: blank:]] \ + /, / g'
mug896
@ mug896 funcionou para mim no Ubuntu 18.04 Eu precisava dos colchetes duplos e do \ antes do +
dmontaner 05/03

Respostas:

14

Com sed:

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

Ou com perl:

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

Editar: para excluir novas linhas em perl, você pode usar um negativo duplo 's/[^\S\n]+/,/g'ou corresponder apenas aos caracteres de espaço em branco de sua escolha 's/[ \t\r\f]+/,/g'.

Caleb
fonte
Obrigado, no entanto, ainda existe um problema: não quero substituir "next lines \ n" por vírgula, e o comando com perl está fazendo isso no momento. Ela sed o comando que você escreveu, ainda não funciona.
Aneuryzm
Desculpe, você precisa escapar do +operador no sed, acabei de atualizar minha resposta. As novas linhas são espaço em branco no perl, então você terá que fazer sua classe de espaço em branco manualmente se não quiser incluí-lo. Eu adicionei duas soluções para isso também.
22411 Caleb
12

Usando tr:

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

Isso substituirá qualquer espaço em branco horizontal por vírgula. Qualquer espaço em branco repetido será substituído apenas por uma única vírgula.

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

Aqui, o nome do arquivo é Servers. Ele contém o conteúdo abaixo.

Server1
Server2
Server3

Se usarmos o comando acima, podemos obter a saída abaixo.

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
fonte