2010-12-04 92 views
4

我有一個文件,其中包含每6小時生成的aprox 12,000行。在其中一些行中,有非ascii字符。從Perl中的文件中刪除包含非ASCII字符的行

我希望能夠運行一個Perl腳本來刪除其中包含非ASCII字符的所有行。

任何幫助,將不勝感激。

+2

爲什麼是適合銷燬數據? – tchrist 2010-12-04 18:47:24

+4

@tchrist - 不確定OP的上下文,但是例如當文件需要被加載到非ascii的barf和業務需求不介意丟失行的軟件中時(例如,加載部分文件好於沒有),但是不要介意刪除或編碼非ascii字符(例如文件格式是基於位置的)會導致的損壞行。這是一個非常現實的場景,我不得不在我的工作中這樣做。 – DVK 2010-12-04 21:07:11

回答

6

你可以這樣做:

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

正則表達式解釋/[^[:ascii:]]/

/開始的正則表達式
  [起始字符類的
  ^使這個字符類(一個匹配,除了什麼是上市什麼類)
    [:ascii:]任何ASCII字符
  ]字符類的末尾
/正則表達式的結束

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"; 
相關問題