![](/img/trans.png)
[英]How can i use a variable inside sed cmd when Variable again has special character?
[英]How can i use sed with unicode character
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
}
我有一個 function 通過特定規則更改 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
和 output:
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=
很抱歉沒有回答,但我無法重現您的問題。
這是您在一個完全獨立的腳本中的代碼(請下次自行執行):
#!/bin/bash
if [[ ö != $'\xC3\xB6' ]]
then
echo "You didn't save this file as UTF-8"
exit 1
fi
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
}
# Shift all characters one letter ahead in the alphabet
cryp_data_letter=({a..z} ğ ö ı)
org_data=({b..z} ğ ö ı a)
# Create the file as you say it is before the sed
cat > temp.txt << "EOF"
,a,b,c ,ğ,h,ı,i
,d,e,f
,j,k,l
,o,ö,p,r
,u,ü ,v,y ,z
,ç,g,m ,n,s
,ş,t
EOF
change
cat temp.txt
當我運行./testscript
我得到這個 output:
bcd öiaj
efg
klm
pıqs
v,ü wz ğ
,çhn ot
,şu
如您所見,包括ö
和ğ
在內的字母被替換並插入得很好。
這里有多個問題,每個問題都可能單獨或組合導致您的問題。
character-encoding
標簽信息頁面了解一些背景和診斷信息。sed
是兼容的。 許多sed
變體仍然沒有注意到 Unicode,並且沒有關於行為應該是什么的穩定建議。 有時切換到不同的語言是有意義的; 許多瑣碎sed
腳本可以很容易地移植到perl -CSD -p
下運行,只需很少或沒有更改。sed
腳本(可能)不會替換替代表示。 尋找 Unicode 標准化。順便說一句,如果第二點就足夠了,那么下面的方法可能真的有效。
perl -CSD -pi~ e 'tr/AEİR...FJ/ABCÇ...YZ/' ./temp.txt
注意-i~
選項進行就地編輯但保存備份文件。 我幾乎沒有信心這會在沒有一些修改的情況下立即生效,並且可能會得到您的澄清。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.