2015-10-06 46 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,