はい。あなたはそのワット/を行うことができますtr
ASCIIのロケールで(GNUのために、あるtr
とにかく、その唯一の範囲の一種)。POSIXクラスを使用するか、8進数で各文字のバイト値を参照できます。また、変換を複数の範囲に分割することもできます。
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
上記のコマンドは、すべての大文字を小文字に変換し、小文字を完全に無視し、他のすべての文字を改行に変換します。もちろん、それから大量の空白行が発生します。tr
-s
リピートは切り替えqueezeは、そのような場合に有用かもしれないが、あなたが一緒にそれを使用する場合[:upper:]
に[:lower:]
変換後、あなたはよくとして大文字を絞る羽目になる。そのように、それはまだ2番目のフィルターを必要とします...
LC... tr ... | tr -s \\n
...または...
LC... tr ... | grep .
...そのため、実行するよりもはるかに不便になります...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... -c
アルファベット順のシーケンスを1つの改行に詰め込んで、パイプの反対側で上部から下部への変換を行います。
それは、その性質の範囲が役に立たないと言っているのではありません。次のようなもの:
tr '\0-\377' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
...値のスペクトラム拡散で入力バイトをすべての桁に変換するため、非常に便利です。無駄にしたくありません。
変換を行う別の方法は、関与し得ます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
は変換と変換のdd
両方unblock
をlcase
同時に実行できるため、多くの作業をそれに渡すことさえ可能かもしれません。ただし、これは、1ワードあたりのバイト数を正確に予測できる場合にのみ、または少なくともunblock
各ブロックの末尾で末尾のスペースを使用するため、少なくとも各ワードにスペースを事前に予測可能なバイトカウントまで埋め込むことができる場合にのみ役立ちます。