【发布时间】:2020-02-03 00:55:30
【问题描述】:
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 那么我如何将 sed 与 unicode 一起应用?或任何其他建议 --> "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=
【问题讨论】:
-
你能创建一个 MCVE 吗?例如,您可以将
printf 'Hello,\xC3\xB6\n' > file; sed -i -e $'s/,\xC3\xB6/, world/' file; cat file复制粘贴到您的终端并运行它以查看UTF-8,ö已成功替换为, world。你能做一些我们可以复制粘贴到我们的终端来显示你的意思的东西吗? (你贴的代码没有声明cryp_data_letter或者创建temp.txt,所以没有人可以尝试调试) -
对不起,我添加了文件内容的解释,并且 cryp_data_letter 是一个保留 29 个字母字符的数组。 @thatotherguy
-
另外 org_data 是 cryp_data_letter 的不同顺序,它们的大小相同。@thatotherguy
-
请将
locale的输出添加到您的问题中。 -
我添加了@Cyrus
标签: linux bash sed command-line terminal