linux - 将所有非 ascii 字符更改为 ascii Bash 脚本

标签 linux bash shell ascii

我正在尝试编写一个脚本,将人名作为参数并创建一个包含他们名字的文件夹。但是在文件夹名称中,非 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 

最佳答案

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

关于linux - 将所有非 ascii 字符更改为 ascii Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981339/

相关文章:

c - 尝试在 Cygwin 上编译 checkinstall 时出现 GCC 错误

linux - 根据输出从配置文件中解析变量

python - ImportError : Entry point ('console_scripts' , 'easy_install' ) 未找到

linux - 从 gitlab ci 中的 shell 脚本安装后,节点和 npm 无法识别

linux - sudo : unable to excute ./blah.sh: 没有那个文件或目录

bash - 使 bash 函数在空时失败

linux - 将 bash 输出重定向到存储在变量中的路径

linux - 如何更改 vncserver 默认几何结构?

c++ - 线程管理内存泄漏

shell - AWK 脚本以及循环和 if 条件