首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash shell脚本中转换特殊字符

在bash shell脚本中转换特殊字符
EN

Stack Overflow用户
提问于 2010-09-01 09:11:55
回答 1查看 4.7K关注 0票数 2

如何编写bash shell脚本(在Mac下)来转换具有特殊字符的各种文件的名称?使用sed不起作用:

代码语言:javascript
运行
复制
echo * | sed s/ü/ue/

我能用别的方法吗?

编辑

这是完整的剧本。它基本上压缩了iPhone应用程序包,然后(应该)转换zip文件名中的任何特殊字符:

代码语言:javascript
运行
复制
#/bin/bash

for appfile in *.app
do
    zipfile=`echo ${appfile} | sed s/app/zip/`
    zipfile=`echo ${zipfile} | sed s/\ /_/`
    # these don't work...
    zipfile=`echo ${zipfile} | sed s/ä/ae/`
    zipfile=`echo ${zipfile} | sed s/ö/oe/`
    zipfile=`echo ${zipfile} | sed s/ü/ue/`
    zipfile=`echo ${zipfile} | sed s/ß/ss/`
    # make zip
    zip -ruy0 "${zipfile}" "${appfile}"
done

编辑

明白了!!诀窍是通过iconv运行文件名来转换编码。我在做替换之前就这样做了,它起了作用:

代码语言:javascript
运行
复制
zipfile=`echo ${zipfile} | iconv -f utf-8-mac -t utf-8`
EN

回答 1

Stack Overflow用户

发布于 2010-09-01 09:22:44

您可能需要使用sed /s/ü/ue/g (注意g,全局替换,所以它替换了所有的事件,而不仅仅是第一次出现)。

你想重命名文件吗?还是只需更改输出文件名的样子?

编辑

试试这个脚本:

代码语言:javascript
运行
复制
#/bin/bash

for appfile in *.app
do
    zipfile=`echo ${appfile} | sed s/app$/zip/`
    zipfile=`echo ${zipfile} | sed s/\ /_/g`
    # these don't work...
    zipfile=`echo ${zipfile} | sed s/ä/ae/g`
    zipfile=`echo ${zipfile} | sed s/ö/oe/g`
    zipfile=`echo ${zipfile} | sed s/ü/ue/g`
    zipfile=`echo ${zipfile} | sed s/ß/ss/g`
    # make zip
    echo zip -ruy0 "${zipfile}" "${appfile}"
done

当我使用两个简单的文件名运行它时,它会给出如下的输出:

代码语言:javascript
运行
复制
$ ./foo.sh
zip -ruy0 ae_oeoe_ue_ss.zip ä  öö ü ß.app
zip -ruy0 ueueueueue.zip üüüüü.app

这些文件名为ä öö ü ß.appüüüüü.app

我刚刚在所有g命令的末尾放置了一个sed,并锚定了app。(如果你有一个名为appliance.appdeliciousapple.app的名字,那就太好了。)最后的echo很方便进行测试。:)

有些事情我不明白:如果您的文件名在iso-8859-1语言环境中有特殊字符(字节0xDF表示),并且命令行以UTF-8 (字节0xC3 0x9F)表示,那么会发生什么?另一条路呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3616514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档