用文件中的空格替换非ASCII字符或特定ASCII字符

时间:2013-02-13 18:07:43

标签: regex perl unix sed solaris

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

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

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

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

此外,我知道一系列ASCII字符,下游有问题,我想用空格替换它们。

我可以获得帮助吗?

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

由于

1 个答案:

答案 0 :(得分:2)

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

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

已编辑添加:

符合您的新要求:

  

我必须用DEC 128 - 148替换非ASCII字符,但DEC 145 - 148和DEC 150-151除外。

你可以写:

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

(请注意从[:^ascii:]“非ASCII字符”更改为[:ascii:]“ASCII字符”,以及从[...]更改“任何字符...”至[^...]...以外的任何字符。”