Sì. Puoi farlo w / tr
in una localizzazione ASCII (che è, per una GNU tr
comunque, tipo della sua unica competenza) . È possibile utilizzare le classi POSIX oppure è possibile fare riferimento ai valori di byte di ciascun carattere per numero ottale. Puoi anche dividere le loro trasformazioni su diversi intervalli.
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
Il comando sopra trasformerebbe tutti i caratteri maiuscoli in minuscoli, ignorerebbe completamente i caratteri minuscoli e trasformerebbe tutti gli altri caratteri in newline. Certo, poi finisci con un sacco di righe vuote. L' tr
-s
opzione Queeze Repeats potrebbe essere utile in quel caso, ma se lo usi insieme [:upper:]
alla [:lower:]
trasformazione, finirai anche per stringere i caratteri maiuscoli. In questo modo richiede ancora un secondo filtro come ...
LC... tr ... | tr -s \\n
...o...
LC... tr ... | grep .
... e quindi finisce per essere molto meno conveniente rispetto a fare ...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... che comprime il -c
complemento di caratteri alfabetici in sequenza in una singola riga nuova di un pezzo, quindi la parte superiore in basso si trasforma sull'altro lato del tubo.
Ciò non significa che intervalli di quella natura non siano utili. Cose come:
tr '\0-\377' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
... può essere molto utile in quanto converte i byte di input in tutte le cifre in uno spettro diffuso dei loro valori. Non sprecare, non vuoi, lo sai.
Un altro modo per effettuare la trasformazione potrebbe comportare 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
Perché dd
può fare entrambe unblock
e lcase
conversioni allo stesso tempo, potrebbe anche essere possibile passare gran parte del lavoro fuori di esso. Ma ciò può essere davvero utile solo se puoi prevedere con precisione il numero di byte per parola - o almeno puoi riempire prima ogni parola di spazi con un conteggio di byte prevedibile, perché unblock
mangia spazi finali alla fine di ogni blocco.