Sed para excluir espaços em branco

28

Alguém sabe como usar o Sed para excluir todos os espaços em branco em um arquivo de texto? Eu tenho tentado usar o comando "d" delete para fazer isso, mas parece que não consigo descobrir

Justin
fonte

Respostas:

35

Que tipo de "espaço"?

"Excluir todos os espaços em branco" pode significar uma das seguintes coisas:

  1. exclua todas as ocorrências do caractere de espaço, código 0x20.
  2. exclua todo o espaço horizontal, incluindo o caractere de tabulação horizontal " \t"
  3. excluir todos os espaços em branco, incluindo nova linha " \n" e outros

A ferramenta certa para o trabalho

Se sednão for um requisito por algum motivo oculto, use melhor a ferramenta certa para o trabalho.

O comando trtem o uso principal na tradução (daí o nome "tr") de uma lista de caracteres para uma lista de outros caracteres. Como uma caixa de canto, pode ser traduzida para a lista vazia de caracteres; A opção -d( --delete) excluirá os caracteres que aparecem na lista.

A lista de caracteres pode fazer uso de classes de caracteres na [:...:]sintaxe.

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

Ao insistir em sed

Com sed, a [:...:]sintaxe para classes de caracteres precisa ser combinada com a sintaxe para conjuntos de caracteres em regexps [...], resultando em algo confuso [[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt
Volker Siegel
fonte
1
+1, a notação POSIX para um espaço em branco é o caminho apropriado.
precisa
1
Ótima dica para usar tr para esta tarefa, funciona muito bem. A única coisa que precisei ajustar foi que o tr lê a entrada do stdin, então o que funcionou para mim foi tr -d ' ' < input.txt > no-spaces.txt.
Sky
O comentário do @ Sky funciona no meu macOS (não testado no Linux). Talvez a resposta deva ser atualizada?
iplus26
Muito obrigado @Sky, isso é realmente um erro grave. Vou consertar as três linhas tragora. (Você vê-la em outro lugar?)
Volker Siegel
7

Você pode usar isso para remover todos os espaços em branco em file:

 sed -i "s/ //g" file
Cyrus
fonte
2
Sem dados. Eu tentei uma abordagem semelhante também. Não funciona
Justin
Deseja excluir espaços em branco ou guias?
Cyrus
1
excluir o espaço em branco
Justin
2
Um teste simples:man sed | sed "s/ //g"
Cyrus
1
@starscream_disco_party: é o mesmo. Você pode substituir todos os 3 /com um personagem diferente, por exemplo:sed "ss ssg"
Cyrus