我有一個文件,其中包含每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