Sim. Você pode fazer isso com tr
um código de idioma ASCII (que é, para um GNU de tr
qualquer maneira, uma espécie de sua única competência) . Você pode usar as classes POSIX ou pode referenciar os valores de bytes de cada caractere pelo número octal. Você também pode dividir as transformações entre os intervalos.
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
O comando acima transforma todos os caracteres em maiúsculas em minúsculas, ignora completamente os caracteres em minúsculas e transforma todos os outros caracteres em novas linhas. Claro, então você acaba com uma tonelada de linhas em branco. A tr
-s
opção de repetição de queeze pode ser útil nesse caso, mas se você a usar ao lado da transformação [:upper:]
para, também acabará [:lower:]
apertando caracteres maiúsculos. Dessa forma, ainda requer um segundo filtro como ...
LC... tr ... | tr -s \\n
...ou...
LC... tr ... | grep .
... e acaba sendo muito menos conveniente do que fazer ...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... que comprime o -c
omplement de caracteres alfabéticos por sequência em uma única nova linha de uma peça e depois faz a transformação de cima para baixo no outro lado do pipe.
Isso não quer dizer que faixas dessa natureza não sejam úteis. Coisas como:
tr '\0-\377' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
... pode ser bastante útil, pois converte os bytes de entrada em todos os dígitos em um espectro de dispersão de seus valores. Não desperdice, não queira, você sabe.
Outra maneira de fazer a transformação pode envolver dd
.
tr '\0-\377' '[A*64][B*64][C*64][D*64]' </dev/urandom |
dd bs=32 cbs=8 conv=unblock,lcase count=1
dadbbdbd
ddaaddab
ddbadbaa
bdbdcadd
Como dd
pode fazer as duas coisas unblock
e as lcase
conversões ao mesmo tempo, pode até ser possível passar muito do trabalho para ele. Mas isso só pode ser realmente útil se você puder prever com precisão o número de bytes por palavra - ou pelo menos conseguir preencher cada palavra com espaços de antemão para uma contagem previsível de bytes, porque unblock
come espaços à direita no final de cada bloco.