【问题标题】:Change all non-ascii chars to ascii Bash Scripting将所有非 ascii 字符更改为 ascii Bash Scripting
【发布时间】:2016-01-04 01:00:37
【问题描述】:

我正在尝试编写一个脚本,将人名作为参数并使用他们的名字创建一个文件夹。但是在文件夹名称中,非 ascii 字符和空格有时会产生问题,所以我想将它们删除或更改为 ascii 字符。 我可以删除姓名和姓氏之间的空格,但我不知道如何更改 ş->s、ç->c、ğ->g、ı->i、ö->o。

这是我的代码:

#!/bin/bash

ARRAY=("$@")
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 Aksoy' 'Cem Dalgıç'

它应该改变如下参数:CisilAksoy CemDalgic

提前致谢

编辑: 我找到了这个解决方案,这看起来不太漂亮,但它确实有效。

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

EDIT2:已解决

#!/bin/bash

ARRAY=("$@")
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 

【问题讨论】:

    标签: linux bash shell ascii


    【解决方案1】:

    任何从 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,
    

    【讨论】:

      【解决方案2】:

      简单地说,你不能。 ASCII 仅支持 128 个字符。 国际字符通常使用 Unicode 的一些变体,它可以存储更多的字符。

      我认为您最好的办法是找出使用这些字符时您的文件夹创建失败的原因。方法或函数是否不支持 Unicode?如果是这样,请弄清楚如何指定它而不是 ASCII。如果没有,您可能会被 sed 和/或 tr 卡住,这可能是不可持续的。

      [更新]

      应该能够通过 tr 替换多个字符,如下所示:

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

      (我删除了我之前的评论。我在不同的服务器上尝试过,它运行良好。)

      【讨论】:

      • 实际上它并没有失败,但我想将所有字符更改为有效的 ascii 字符。我需要更改的字符集是确定的。 (ş->s, ç->c, ı->i, ğ->g, ö->o, ü->u)
      • sed 's/Ç/c/g; s/ş/s/g'' '
      猜你喜欢
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      相关资源
      最近更新 更多