Removendo quebras de linha, espaços em branco e tabulações de todos os arquivos

0

Digamos que eu tenha uma pasta com arquivos de texto de 10K. Eu gostaria de remover todo espaço, TAB e linebreak de cada arquivo.

Como posso fazer isso com eficiência?

    
por Amelio Vazquez-Reina 06.05.2015 / 20:11

3 respostas

5

Você pode usar tr :

LC_ALL=C tr -d '[:blank:]\n' < file_in > file_out

Desde quando você precisa trabalhar com arquivos de 10k, uma solução melhor seria:

find . -type f -exec perl -i.bak -pe 's/ |\t|\n//g' {} +
    
por 06.05.2015 / 20:28
2

Você pode usar o GNU sed :

$ shopt -s dotglob # includes "hidden" files beginning with .
$ sed -i.bak ':a;N;$!ba;s/[\n \t]//g' *

Isso processará todos os arquivos na pasta. Ele armazena um backup do arquivo original com extensão .bak . Basta usar -i sem .bak , se você não quiser backups.

Para fazer isso, use isso de forma alternativa:

sed -i.bak ':a;N;$!ba;s/[\n \t]//g' $(find . -type f)
    
por 06.05.2015 / 20:45
0

Do ponto de velocidade de manipulação do conteúdo do arquivo, eu diria que tr é mais rápido que uma solução de expressão regular em perl , sed ou similar.

Quanto ao loop de mais de dez mil arquivos, não há muito o que fazer, pois tr processará stdin to stdout , então você está gerando tr 10k vezes do jeito que você faz. Para isso, find . -maxdepth -exec é um bom caminho para qualquer um.

    
por 06.05.2015 / 20:28