Evet. Bunu tr
bir ASCII yerel ayarında yapabilirsiniz ( tr
yine de bir GNU için , bu türün tek amacı) . POSIX sınıflarını kullanabilir veya her karakterin bayt değerlerine sekizli sayı ile başvurabilirsiniz. Dönüşümlerini aralıklara bölebilirsiniz.
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
Yukarıdaki komut tüm büyük harfleri küçük harfe dönüştürür, küçük harf karakterlerini tamamen yok sayar ve diğer tüm karakterleri yeni satırlara dönüştürür. Tabii ki, o zaman bir ton boş çizgi ile sarılıyorsunuz. tr
-s
Queeze tekrarlar bu durumda yararlı olabilir geçiş, ancak yanında kullanırsanız [:upper:]
için [:lower:]
daha sonra dönüştürme size sıra küçük karakterlere sıkma rüzgar. Bu şekilde hala ikinci bir filtre gerektirir ...
LC... tr ... | tr -s \\n
...veya...
LC... tr ... | grep .
... ve bu yüzden yapmaktan çok daha az kullanışlı oluyor ...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... -c
alfabetik karakterlerin dizilimini sırayla tek bir yeni satıra bir parçaya sıkıştırarak borunun diğer tarafında yukarıdan aşağıya dönüşümü yapar.
Bu, o doğanın aralıklarının yararlı olmadığı anlamına gelmez. Gibi şeyler:
tr '\0-\377' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
... giriş baytlarını değerlerinin yayılı spektrumu üzerindeki tüm rakamlara dönüştürdüğü için oldukça kullanışlı olabilir. İsraf etme, istemiyorum, biliyorsun.
Dönüşümü yapmanın başka bir yolu da içerebilir 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
Çünkü dd
hem yapabilir unblock
ve lcase
aynı zamanda dönüşümleri, hatta kendisine işten çok geçmek mümkün olabilir. Ancak bu, kelime başına bayt sayısını doğru bir şekilde tahmin edebiliyorsanız veya en azından her kelimeyi önceden tahmin edilebilir bir bayt sayısına boşluklarla doldurabiliyorsanız gerçekten yararlı olabilir, çünkü unblock
her bloğun sonunda arka boşluklar yer.