从Perl中的文件中删除包含非ASCII字符的行

时间:2010-12-04 18:43:30

标签: perl file non-ascii-characters

我有一个文件,每{{}}}小时生成aprox 12,000行。在其中一些行中,有非ascii字符。

我希望能够运行Perl脚本来删除其中包含非ASCII字符的所有行。

2 个答案:

答案 0 :(得分:6)

你可以这样做:

perl -i.bak -ne 'print unless(/[^[:ascii:]]/)' file

/[^[:ascii:]]/的正则表达式解释:

/正则表达式的开头
[字符类的开头
^使其成为否定字符类(除了列出的内容之外的所有类别) [:ascii:]任何ASCII字符
]字符类的结尾
/正则表达式结束

答案 1 :(得分:1)

#!/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";