Perl 将特殊字符替换为空白
你有没有办法把所有的特殊字符翻译成空格Perl 将特殊字符替换为空白,perl,awk,sed,Perl,Awk,Sed,你有没有办法把所有的特殊字符翻译成空格 ^@^@^@^@<9C>^G^@^@*+^@^@ABD ^@^@^@^@*+^@^@<DC>_^@^@ASD ^@^@^@^@*+^@^@<DC>_^@^@ASaa ^@^@^@^@<80><C2>^A^@<C2>p^A^@ABD 兽医 ^@^@^@^@<9C>^G^@^@*+^@^@ABD$ ^@^@^@^@*+^@^@<DC>_^@^@ABD$ ^@^@^
^@^@^@^@<9C>^G^@^@*+^@^@ABD
^@^@^@^@*+^@^@<DC>_^@^@ASD
^@^@^@^@*+^@^@<DC>_^@^@ASaa
^@^@^@^@<80><C2>^A^@<C2>p^A^@ABD
兽医
^@^@^@^@<9C>^G^@^@*+^@^@ABD$
^@^@^@^@*+^@^@<DC>_^@^@ABD$
^@^@^@^@*+^@^@<DC>_^@^@ABD$
^@^@^@^@<80><C2>^A^@<C2>p^A^@ABD$
还是从这个
而且产出也不符合预期
输出
ABD
ASD
ASaa
ABD
“特殊字符”没有通用定义,您可能需要指定要保留的字符——因此删除除这些字符以外的所有字符
$string =~ s/[^a-zA-Z0-9_,.-]//g; # etc, spell out what to leave
您可以使用单词字符模式\w
$string =~ s/[^\w,.-]//g;
我只举了几个标点符号的例子
您尝试使用的POSIX字符类也可以工作
$string =~ s/[^[:alnum:][:punct:]]/;
或者以\p
为了他们
当然,我们也可以在上面链接的综合页面上找到实际的Unicode属性。小心语法;请参阅中的“POSIX字符类”部分
或者您真的想删除不可打印的字符
$string =~ s/[^[:print:]]//g;
将其用作命令行程序(“一行程序”) 将输出另存为
新文件
,或
perl -i.bak -wpe's/[^[:print:]]//g' file
更改文件的位置(如果不需要备份,请删除.bak
)
如果输入是从另一个程序通过管道传输的
echo input | perl -wpe's/[^w,.-]//g'
你能给我们看一下你文件的
od
输出,或者cat-vET
输出吗?你好像在试图剥洋葱皮。这个问题有点不清楚,你不认为吗?另外,OP似乎在寻找一个命令行解决方案,所以至少,你应该知道这是一个Perl脚本片段。@kvantour I thikn这是一个非常常见的问题(也有其非特定性)把它说清楚是很有用的here@user10254032我认为这是一个很好的问题,我不知道-1代表什么(向上投票)@user10254032我已经清理了POSIX字符类与Unicode属性的使用,并添加了另一个参考。只是让你知道。。。
$string =~ s/[^[:print:]]//g;
perl -wpe's/\W//g' file > new_file
perl -i.bak -wpe's/[^[:print:]]//g' file
echo input | perl -wpe's/[^w,.-]//g'