Oui. Vous pouvez le faire avec tr
une locale ASCII (qui est, pour un GNU de tr
toute façon, une sorte de sa seule compétence) . Vous pouvez utiliser les classes POSIX ou référencer les valeurs d'octets de chaque caractère par nombre octal. Vous pouvez également répartir leurs transformations sur plusieurs plages.
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
La commande ci-dessus transformerait tous les caractères majuscules en minuscules, ignorerait complètement les caractères minuscules et transformerait tous les autres caractères en nouvelles lignes. Bien sûr, vous vous retrouvez avec une tonne de lignes blanches. Le tr
-s
commutateur de répétitions queeze pourrait être utile dans ce cas, mais si vous l'utilisez à côté de la transformation [:upper:]
to, [:lower:]
vous finissez également par presser les caractères majuscules. De cette façon, il nécessite toujours un deuxième filtre comme ...
LC... tr ... | tr -s \\n
...ou...
LC... tr ... | grep .
... et donc ça devient beaucoup moins pratique que de le faire ...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... qui comprime le -c
complément de caractères alphabétiques par séquence en une seule nouvelle ligne d'un morceau, puis transforme le haut en bas de l'autre côté du tuyau.
Cela ne veut pas dire que des plages de cette nature ne sont pas utiles. Choses comme:
tr '\0-\377' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
... peut être assez pratique car il convertit les octets d'entrée en tous les chiffres sur un spectre étalé de leurs valeurs. Ne gaspillez pas, ne voulez pas, vous savez.
Une autre façon de faire la transformation pourrait impliquer 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
Parce qu'il dd
peut faire les deux unblock
et les lcase
conversions en même temps, il pourrait même être possible de lui passer une grande partie du travail. Mais cela ne peut être vraiment utile que si vous pouvez prédire avec précision le nombre d'octets par mot - ou au moins vous pouvez remplir chaque mot avec des espaces à l'avance pour un nombre d'octets prévisible, car unblock
mange des espaces de fin à la fin de chaque bloc.