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' {} +
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?
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)
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.