Evet. Bunu trbir ASCII yerel ayarında yapabilirsiniz ( tryine 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 -sQueeze 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:]'
... -calfabetik 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ü ddhem yapabilir unblockve lcaseaynı 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ü unblockher bloğun sonunda arka boşluklar yer.