Ja. Sie können dies mit tr
einem ASCII-Gebietsschema tun (was für eine GNU tr
ohnehin die einzige Aufgabe ist) . Sie können die POSIX-Klassen verwenden oder die Bytewerte jedes Zeichens durch eine Oktalzahl referenzieren. Sie können ihre Transformationen auch auf Bereiche aufteilen.
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
Der obige Befehl würde alle Großbuchstaben in Kleinbuchstaben umwandeln, Kleinbuchstaben vollständig ignorieren und alle anderen Zeichen in Zeilenumbrüche umwandeln. Natürlich haben Sie dann eine Menge Leerzeilen. Der tr
-s
Schalter "Queeeze Repeats" kann in diesem Fall nützlich sein. Wenn Sie ihn jedoch neben der [:upper:]
to- [:lower:]
Transformation verwenden, werden auch Großbuchstaben gedrückt . Auf diese Weise benötigt es noch einen zweiten Filter wie ...
LC... tr ... | tr -s \\n
...oder...
LC... tr ... | grep .
... und so wird es viel weniger bequem als ...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... das die -c
Ergänzung von alphabetischen Zeichen nacheinander zu einer einzigen neuen Zeile pro Stück zusammenpresst und dann die Transformation von oben nach unten auf der anderen Seite der Pipe durchführt.
Das heißt nicht, dass Bereiche dieser Art nicht nützlich sind. Zeug wie:
tr '\0-\377' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
... kann sehr praktisch sein, da es die Eingabebytes über ein Spreizspektrum ihrer Werte in alle Ziffern konvertiert. Verschwenden Sie nicht, wollen Sie nicht, wissen Sie.
Ein anderer Weg, um die Transformation durchzuführen, könnte beinhalten 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
Da dd
sowohl Konvertierungen unblock
als auch lcase
Konvertierungen gleichzeitig ausgeführt werden können, ist es möglicherweise sogar möglich, einen Großteil der Arbeit an diese weiterzugeben. Dies kann jedoch nur dann wirklich nützlich sein, wenn Sie die Anzahl der Bytes pro Wort genau vorhersagen können - oder zumindest jedes Wort zuvor mit Leerzeichen auf eine vorhersagbare Byteanzahl auffüllen können, da unblock
am Ende jedes Blocks nachgestellte Leerzeichen verwendet werden.