Si. Puede hacer eso con tr
una configuración regional ASCII (que es, para un GNU de tr
todos 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
-s
repeticiones 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 -c
secuencia 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 dd
puede hacer ambas cosas unblock
y lcase
conversiones 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 unblock
come espacios finales al final de cada bloque.