如何使用shell脚本获取,复制和替换文件中的非ascii字符?

时间:2013-07-29 10:44:08

标签: shell replace ascii

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

2 个答案:

答案 0 :(得分:0)

要获取文件中的非ascii字符,用户可以使用以下sed语句。

sed 's/[^\d32-\d126]//g' <file_name>

上述说明将输入文件中的非ASCII字符打印到stdout。通过为 sed 提供-i选项,用户可以从文件中删除ASCII字符。

要用特定字符替换非ascci字符,用户可以使用以下语句。

sed 's/[\d32-\d126]/<replacing_char>/g' <file_name>

答案 1 :(得分: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,可以在its project page on freecode.com上获取。