1

我想使用 shell 脚本、sed 或 Perl 将非 ASCII 字符或特定 ASCII 字符替换为文件中的空格。

首先是用文件中的空格替换所有非 ASCII 字符。我知道我们可以使用以下命令

perl -pi -e 's/[[:^ascii:]]/ /g'

下游也有某些 ASCII 字符不能接受,所以我想用空格替换这些字符。例如,下游不接受值为 0x19(EM - 介质结束)的 ASCII 字符,我想用空格替换它。

我也知道下游有问题的一系列 ASCII 字符,我想用空格替换它们中的每一个。

我可以得到帮助来完成这个吗?

注意:我们系统中的 Perl 版本是 5.8.4。我想在 Solaris 10 机器上做这个练习。

谢谢

4

1 回答 1

3

您可以将它们添加到正则表达式中的字符类中。例如,要删除 - 范围内的非 ASCII 字符、加号和\031(比如说)字符,您可以编写:ae

perl -pi -e 's/[[:^ascii:]\031a-e]/ /g'

编辑添加:

对于您的新要求:

我必须用 DEC 128 及更高版本替换非 ASCII 字符,但 DEC 145 – 148 和 DEC 150-151 除外。

你可以写:

perl -pi -e 's/[^[:ascii:]\x91-\x94\x96\x97]/ /g; s/\031/ /g;'

(注意从[:^ascii:]“非 ASCII 字符”到[:ascii:]“ASCII 字符”的变化,以及从[...]“任何字符...”到[^...]“除“以外的任何字符...”的变化。)

于 2013-02-13T18:13:18.150 回答