Como posso fazer uma cópia de um arquivo removendo todo o espaço em branco (para que o novo arquivo não tenha espaço em branco)

1

Eu quero excluir todos os espaços de um determinado arquivo e gravar o resultado para outro. Eu quero usar um script de shell para isso.

    
por Abhishek Chourasia 25.01.2018 / 12:23

2 respostas

2

Para remover todos os caracteres de espaço em branco horizontal (ou seja, espaços e guias horizontais)

tr -d '[:blank:]' < file > newfile

Para remover todos caracteres de espaço em branco (incluindo novas linhas e tabulações verticais)

tr -d '[:space:]' < file > newfile

Observe que isso deixará o arquivo sem a quebra de linha de terminação obrigatória do POSIX: veja por exemplo Por que os arquivos de texto devem terminar com uma nova linha?

    
por steeldriver 25.01.2018 / 14:28
1

O processamento de texto com um shell é lento. Você deve usar um utilitário de processamento de texto para isso. Por exemplo, você poderia usar sed

Remova todos os espaços em branco horizontais:

sed 's/\s//g' file > output

Remove todo o espaço em branco horizontal e linhas ou linhas vazias com apenas espaço em branco:

sed 's/\s//g;/^$/d' file > output

Remova todos os espaços em branco de qualquer tipo implacavelmente, incluindo todas as novas linhas

sed ':a;s/\s//g;N;s/\n//;ba' file > output

Notas:

  • s/\s//g substitui qualquer caractere de espaço em branco horizontal por nada, correspondendo a cada caractere de espaço em branco na linha ( g significa todas as correspondências na linha)
  • ; separa os comandos sed
  • /^$/ linha vazia
  • d exclui o espaço do padrão
  • :a label - execute daqui
  • N leu a próxima linha no espaço de padrões
  • \n newline no espaço de padrões
  • ba ramifica para rotular :a e executar novamente
por Zanna 25.01.2018 / 13:25