Удалить строки, содержащие не-ASCII символы из файла в Perl - PullRequest
4 голосов
/ 04 декабря 2010

У меня есть файл с aprox 12,000 строками, генерируемыми каждые 6 часа. В некоторых из этих строк есть символы не ascii.

Я бы хотел иметь возможность запустить скрипт Perl, чтобы удалить все строки, в которых есть не-ASCII-символы.

Ответы [ 2 ]

6 голосов
/ 04 декабря 2010

Вы можете сделать:

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

Regex объяснение для /[^[:ascii:]]/:

/ начало регулярного выражения
[ начало класса персонажей
^ сделать это отрицательным классом символов (класс, который соответствует чему-либо кроме того, что перечислено)
[:ascii:] любой символ ASCII
] конец класса символов
/ конец регулярного выражения

1 голос
/ 04 декабря 2010
#!/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";
...