我有一个文件,其中包含每6
小时生成的aprox 12,000
行。在其中一些行中,有非ascii字符。从Perl中的文件中删除包含非ASCII字符的行
我希望能够运行一个Perl脚本来删除其中包含非ASCII字符的所有行。
任何帮助,将不胜感激。
我有一个文件,其中包含每6
小时生成的aprox 12,000
行。在其中一些行中,有非ascii字符。从Perl中的文件中删除包含非ASCII字符的行
我希望能够运行一个Perl脚本来删除其中包含非ASCII字符的所有行。
任何帮助,将不胜感激。
你可以这样做:
perl -i.bak -ne 'print unless(/[^[:ascii:]]/)' file
正则表达式解释/[^[:ascii:]]/
:
/
开始的正则表达式
[
起始字符类的
^
使这个负字符类(一个匹配,除了什么是上市什么类)
[:ascii:]
任何ASCII字符
]
字符类的末尾
/
正则表达式的结束
#!/usr/bin/perl -p
END {close STDOUT}
use 5.010;
use utf8;
use strict;
use autodie;
use warnings qw<FATAL all>;
use open qw<IN :bytes OUT :encoding(US-ASCII) :std>;
BEGIN {$SIG{__WARN__}=sub{confess}}
use sigtrap qw<stack-trace normal-signals error-signals>;
use Carp;
"disconcertingly";
为什么是适合销毁数据? – tchrist 2010-12-04 18:47:24
@tchrist - 不确定OP的上下文,但是例如当文件需要被加载到非ascii的barf和业务需求不介意丢失行的软件中时(例如,加载部分文件好于没有),但是不要介意删除或编码非ascii字符(例如文件格式是基于位置的)会导致的损坏行。这是一个非常现实的场景,我不得不在我的工作中这样做。 – DVK 2010-12-04 21:07:11