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

Regex 用文件中的空格替换非ASCII字符或特定ASCII字符,regex,perl,unix,sed,solaris,Regex,Perl,Unix,Sed,Solaris,我想使用shell脚本、sed或Perl将非ASCII字符或特定ASCII字符替换为文件中的空格 首先是用文件中的空格替换所有非ASCII字符。我知道我们可以用下面的命令 perl -pi -e 's/[[:^ascii:]]/ /g' 还有一些下游无法接受的ASCII字符,所以我想用空格替换这些字符。例如,下游不接受值为0x19(EM-媒体结尾)的ASCII字符,我想用空格替换它 另外,我知道下游有问题的ASCII字符的范围,我想用空格替换它们中的每一个 我能得到帮助来完成这个任务吗 注意:

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

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

perl -pi -e 's/[[:^ascii:]]/ /g'
还有一些下游无法接受的ASCII字符,所以我想用空格替换这些字符。例如,下游不接受值为0x19(EM-媒体结尾)的ASCII字符,我想用空格替换它

另外,我知道下游有问题的ASCII字符的范围,我想用空格替换它们中的每一个

我能得到帮助来完成这个任务吗

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


谢谢

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

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

编辑以添加:

对于您的新要求:

我必须将非ASCII字符替换为DEC 128及以上,DEC 145–148和DEC 150-151除外,替换为空格

你可以写:

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

(注意从
[:^ascii:][/code>“非ascii字符”更改为
[:ascii:][/code>“ascii字符”,以及从
[…]
“任何字符
..
”更改为
[^…]
“除
..
以外的任何字符”)

谢谢。假设我必须用空格替换12月128日及以上的ASCII,12月145-148日和12月150-151日除外。那我们怎么做呢?@Chkusi:等等,那没道理。对于Perl来说,
[:ascii://code>表示范围在0-127之间的字符。“12月128日及以上的ASCII”本质上是矛盾的。@FtLie:不,那是八进制。(你错过了“和DEC 150-151”部分。)@ruakh抱歉,我不该称之为ASCII。这是因为我必须用DEC 128及以上替换非ASCII字符,DEC 145–148和DEC 150-151除外,用空格替换。@ruakh:在Perl语句中,我需要使用十六进制值,对吗?上面的第二个perl语句中是否缺少“]”?您的问题似乎比您描述的更复杂。请发布更相关的内容,而不是参与聊天来定义您的problem@Borodin当前位置我已经对我的问题给出了正确的描述。我不明白你为什么这么想,然后投了反对票。我已经清楚地解释了这个问题。我面临的问题是如何找到合适的解决方法来覆盖所有角色范围。