0

当我想从文件名中替换非 ascii 字符时,我遇到了一些问题。当我想复制文件进行一些测试时,它回答我“无法打开‘FileName’进行阅读:没有这样的文件或目录。所有非ascii文件都被“_”更改。你知道吗如何获取真实姓名或如何替换它 l=用一个好的 shell 脚本?非常感谢。

4

2 回答 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 convmvman charsets

附录:

如果您还没有convmv安装,您可以在 freecode.com 上的项目页面上获取它。

于 2013-08-06T12:40:10.843 回答