Si. Puede hacer eso con truna configuración regional ASCII (que es, para un GNU de trtodos modos, algo así como su único alcance) . Puede usar las clases POSIX, o puede hacer referencia a los valores de bytes de cada carácter por número octal. También puede dividir sus transformaciones en rangos.
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
El comando anterior transformaría todos los caracteres en mayúsculas a minúsculas, ignoraría por completo los caracteres en minúsculas y transformaría todos los demás caracteres a nuevas líneas. Por supuesto, entonces terminas con un montón de líneas en blanco. Las tr -srepeticiones queeze detector puede resultar útil en ese caso, pero si lo usa junto con el [:upper:]de [:lower:]la transformación, entonces terminan apretando los caracteres en mayúsculas también. De esa manera, todavía requiere un segundo filtro como ...
LC... tr ... | tr -s \\n
...o...
LC... tr ... | grep .
... y entonces resulta ser mucho menos conveniente que hacerlo ...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... que exprime la -csecuencia de caracteres alfabéticos por secuencia en una sola línea nueva de una pieza, luego hace la transformación de arriba a abajo en el otro lado de la tubería.
Eso no quiere decir que los rangos de esa naturaleza no sean útiles. Cosas 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
... puede ser bastante útil ya que convierte los bytes de entrada a todos los dígitos en un amplio espectro de sus valores. No desperdicies, no quieras, ya sabes.
Otra forma de hacer la transformación podría involucrar 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
Debido a que ddpuede hacer ambas cosas unblocky lcaseconversiones al mismo tiempo, incluso podría ser posible pasarle gran parte del trabajo. Pero eso solo puede ser realmente útil si puede predecir con precisión el número de bytes por palabra, o al menos puede rellenar cada palabra con espacios de antemano a un recuento de bytes predecible, porque unblockcome espacios finales al final de cada bloque.