Sim. Você pode fazer isso com tr
em uma localidade ASCII (que é, de qualquer forma, para um GNU tr
, o que é seu único atributo) . Você pode usar as classes POSIX ou pode referenciar os valores de byte de cada caractere por número octal. Você também pode dividir as transformações entre os intervalos.
LC_ALL=C tr '[:upper:]LC... tr ... | tr -s \n
-13-1403-7' '[:lower:][\n*]' <input
O comando acima transformaria todos os caracteres maiúsculos para minúsculos, ignoraria totalmente os caracteres minúsculos e transformaria todos os outros caracteres em novas linhas. Claro, então você acaba com uma tonelada de linhas em branco. A troca de repetições tr
-s
queeze poderia ser útil nesse caso, mas se você usá-la junto com a transformação [:upper:]
to [:lower:]
, você acabará apertando os caracteres maiúsculos também. Dessa forma, ainda requer um segundo filtro como ...
LC... tr ... | grep .
... ou ...
LC_ALL=C tr -sc '[:alpha:]' \n <input | tr '[:upper:]' '[:lower:]'
... e assim acaba sendo muito menos conveniente do que fazer ...
tr 'tr 'LC_ALL=C tr '[:upper:]LC... tr ... | tr -s \n
-13-1403-7' '[:lower:][\n*]' <input
-7' '[A*64][B*64][C*64][D*64]' </dev/urandom |
dd bs=32 cbs=8 conv=unblock,lcase count=1
dadbbdbd
ddaaddab
ddbadbaa
bdbdcadd
-7' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
... que comprime a -c
omplement de caracteres alfabéticos por sequência em uma única linha nova em uma peça, e então faz a transformação superior para inferior no outro lado da linha.
Isso não quer dizer que intervalos dessa natureza não sejam úteis. Coisas como:
LC... tr ... | grep .
... pode ser muito útil, pois converte os bytes de entrada para todos os dígitos em um espectro de seus valores. Não desperdice, não quero, você sabe.
Outra maneira de fazer a transformação pode envolver dd
.
LC_ALL=C tr -sc '[:alpha:]' \n <input | tr '[:upper:]' '[:lower:]'
Como o dd
pode fazer as duas conversões unblock
e lcase
ao mesmo tempo, pode até ser possível passar boa parte do trabalho para ela. Mas isso só pode ser realmente útil se você puder prever com precisão o número de bytes por palavra - ou pelo menos pode preencher cada palavra com espaços antes para uma contagem de bytes previsível, porque unblock
come espaços à direita no final de cada bloco. / p>