当我想从文件名中替换非 ascii 字符时,我遇到了一些问题。当我想复制文件进行一些测试时,它回答我“无法打开‘FileName’进行阅读:没有这样的文件或目录。所有非ascii文件都被“_”更改。你知道吗如何获取真实姓名或如何替换它 l=用一个好的 shell 脚本?非常感谢。
问问题
2762 次
2 回答
0
要获取文件中的非 ascii 字符,用户可以使用以下 sed 语句。
sed 's/[^\d32-\d126]//g' <file_name>
以上指令会将输入文件中的非 ASCII 字符打印到标准输出。通过给sed用户提供 -i 选项,用户可以从文件中删除 ASCII 字符。
要将非 ascci 字符替换为特定字符,用户可以使用以下语句。
sed 's/[\d32-\d126]/<replacing_char>/g' <file_name>
于 2013-07-29T11:39:58.260 回答
0
如果您知道在创建文件的 MacOS 或 Windows 机器上使用的编码,您可以使用convmv
该编码更改为您喜欢的编码:
将单个文件名从 UTF16 重新编码为 ASCII:
$ convmv -f utf8 -t ascii --notest <FILE NAME>
使用 Linux 规范化将整个目录从 ISO8859-1 递归地重新编码为 UTF16:
$ convmv -f iso8859-1 -t utf16 --nfc -r --notest <DIRECTORY NAME>
有关详细信息,请参阅man convmv
和man charsets
。
附录:
如果您还没有convmv
安装,您可以在 freecode.com 上的项目页面上获取它。
于 2013-08-06T12:40:10.843 回答