Bu GNU uygulamasının bilinen bir ( 1 , 2 , 3 , 4 , 5 , 6 ) sınırlamasıdır tr
.
O kadar çok o desteklemediği değil yabancı , İngilizce olmayan veya ASCII olmayan karakterler, ancak çok baytlık karakterleri desteklemiyor.
Bu Kiril karakterleri, iso8859-5 (karakter başına tek bayt) karakter kümesinde (ve yerel ayarınız bu karakter kümesini kullanıyorsa) yazılmışsa Tamam olarak işlem görür, ancak sorununuz ASCII olmayan yerlerde UTF-8 kullanıyor olmanızdır. karakterler 2 veya daha fazla baytta kodlanır.
GNU’nun bunu düzeltmek için bir planı var ( ayrıca bakınız ) ve çalışma henüz devam etmedi.
FreeBSD veya Solaris'te tr
sorun yok.
Bu arada, çoğu kullanım için tr
, çok baytlık karakterleri destekleyen GNU sed veya GNU awk kullanabilirsiniz.
Örneğin, sizin:
tr -cs '[[:alpha:][:space:]]' ' '
yazılmış olabilir:
gsed -E 's/( |[^[:space:][:alpha:]])+/ /'
veya:
gawk -v RS='( |[^[:space:][:alpha:]])+' '{printf "%s", sep $0; sep=" "}'
Küçük ve büyük harf ( tr '[:upper:]' '[:lower:]'
) arasında dönüştürmek için :
gsed 's/[[:upper:]]/\l&/g'
(bu rakam l
küçük harf L
değil 1
rakamdır).
veya:
gawk '{print tolower($0)}'
Taşınabilirlik perl
için başka bir alternatif:
perl -Mopen=locale -pe 's/([^[:space:][:alpha:]]| )+/ /g'
perl -Mopen=locale -pe '$_=lc$_'
Verilerin tek baytlık bir karakter kümesinde gösterilebileceğini biliyorsanız, o zaman bu karakter kümesinde işleyebilirsiniz:
(export LC_ALL=ru_RU.iso88595
iconv -f utf-8 |
tr -cs '[:alpha:][:space:]' ' ' |
iconv -t utf-8) < Russian-file.utf8