2015-10-06 84 views
0

我正在嘗試編寫一個腳本,它將人名作爲參數並使用其名稱創建一個文件夾。但在文件夾名稱中,非ASCII字符和空格有時會出現問題,所以我想刪除它們或將它們更改爲ASCII字符。 我可以刪除名字和姓氏之間的空白,但我無法弄清楚我該如何更改?s,ç-> c,?g,?i,?o> o。將所有非ascii字符更改爲ascii Bash腳本

這裏是我的代碼:

#!/bin/bash 

ARRAY=("[email protected]") 
ELEMENTS=${#ARRAY[@]} 


for ((i=0;i<$ELEMENTS;i++)) 
do #C-like for loop syntax 
    echo ${ARRAY[$i]} | grep "[^ ]*\b" | tr -d ' ' 
done 

我跑我的劇本一樣,myscript.sh「Çişil索伊 '傑姆Dalgıç'

應該改變的參數,如:CisilAksoy CemDalgic

在此先感謝

編輯: 我發現這個解決方案,這看起來不漂亮,但它的工作原理。

sed 's/ş/s/gI; s/ç/c/gI; s/ü/u/gI; s/ö/o/gI; s/ı/i/gI;' 

EDIT2:解決

#!/bin/bash 

ARRAY=("[email protected]") 
ELEMENTS=${#ARRAY[@]} 

for ((i=0;i<$ELEMENTS;i++)) 
do #C-like for loop syntax 
    v=$(echo ${ARRAY[$i]} | grep "[^ ]*\b" | tr -d ' ' | sed 's/ş/s/gI; s/ç/c/gI; s/ü/u/gI; s/ö/o/gI; s/ı/i/gI;') 
    mkdir $v 
done 

回答

1

簡單的說,你不能。 ASCII只支持128個字符。 國際字符通常使用Unicode的一些變體,這可以存儲更多的字符數。

我認爲你最好的選擇是確定你使用這些字符時你的文件夾創建失敗的原因。該方法或函數是否支持Unicode?如果有,請指出如何指定而不是ASCII。如果沒有,你可能會陷入sed和/或tr,這可能是不可持續的。

[增訂]

應該能夠通過TR代替多個字符,比如如下:

echo şğıö | tr şçğıö scgio 
sgio 

(我刪除我的評論從早先我嘗試了不同的服務器上,它工作得很好。)

+0

其實它並沒有失敗,但我想改變這一切字符在有效的ASCII的。字符集是我需要改變的地方。 (s-> s,ç-> c,ı-> i,> g,ö-> o,ü-> u) –

+0

sed's/c/c/g; s /ş/ s/g'''<<<'Çişil'我認爲這不是一個好方法,但我的工作是這樣的 –

2

任何從UTF-8轉換爲ASCII的東西都是妥協。

iconv程序做什麼要求(不一定滿足每個人,如在Transliterate any convertible utf8 char into ascii equivalent)。鑑於

Çişil Aksoy' 'Cem Dalgıç 

在 「foo.txt的」,並命令

iconv -f UTF8 -t ASCII//TRANSLIT <foo.txt 

,會給

Cisil Aksoy' 'Cem Dalg?c 

lynx browser有一組不同的ASCII逼近。使用此命令

lynx -display_charset=us-ascii -force_html -nolist -dump foo.txt 

我得到這樣的結果:

C,isil Aksoy' 'Cem Dalgic,