function change() {
for i in {0..28}
do
echo ",${cryp_data_letter[$i]}" "${org_data[$i]}"
sed -i "s/,${cryp_data_letter[$i]}/${org_data[$i]}/g" "./temp.txt"
#cat "./temp.txt"
done
}
我有一个函数用于按照特定规则更改temp.txt中的某些字符,但某些字符(如ı、ğ、ö等)会转换为空字符串。我认为问题的原因是UTF-8编码,所以我该如何使用Unicode应用sed?或者是否有其他建议来代替这个命令:"sed -i "s/,${cryp_data_letter[$i]}/${org_data[$i]}/g" "./temp.txt""?
这是给出的文件temp.txt:
abc ğhıi
def
jkl
oöpr
uü vy z
çgm ns
şt
并输出:
IDK ,ğS,ıT
NMY
BOÜ
G,öHÇ
P,ü ÖF ,
,çUŞ ZĞ
,şV
顺便提一下,在返回过程中,我将把所有字母改为小写,并在所有字母之前加上“,”,这样它就会变成sed之前的形式:
,a,b,c ,ğ,h,ı,i
,d,e,f
,j,k,l
,o,ö,p,r
,u,ü ,v,y ,z
,ç,g,m ,n,s
,ş,t
本地化:
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=tr_TR.UTF-8
LC_TIME=tr_TR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=tr_TR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=tr_TR.UTF-8
LC_NAME=tr_TR.UTF-8
LC_ADDRESS=tr_TR.UTF-8
LC_TELEPHONE=tr_TR.UTF-8
LC_MEASUREMENT=tr_TR.UTF-8
LC_IDENTIFICATION=tr_TR.UTF-8
LC_ALL=
printf 'Hello,\xC3\xB6\n' > file; sed -i -e $'s/,\xC3\xB6/, world/' file; cat file
复制粘贴到你的终端并运行它,看看UTF-8的,ö
是否成功被替换为, world
。你能否提供一些我们可以复制粘贴到终端的代码来展示你的意思?(你发布的代码没有声明cryp_data_letter
或创建temp.txt
,所以其他人无法尝试调试) - that other guylocale
的输出。 - Cyrustemp.txt
文件只包含小写字符,而你的数据数组却是大写的。默认情况下,sed
区分大小写。 - that other guy