В Perl, как удалить ^M из файла?
у меня есть скрипт, который добавляет новые поля к существующему CSV, однако ^M
символы появляются в конце старых строк, поэтому новые поля попадают в новую строку вместо той же. Как удалить ^M
символы из CSV-файла с помощью Perl?
10 ответов
слегка несвязанный, но чтобы удалить ^M из командной строки с помощью Perl, сделайте следующее:
perl -p -i -e "s/\r\n/\n/g" file.name
Я предпочитаю более общее решение, которое будет работать с входом DOS или Unix. Предполагая, что вход от STDIN:
while (defined(my $ln = <>))
{
chomp($ln);
chop($ln) if ($ln =~ m/\r$/);
# filter and write
}
эта строка заменяет все символы ^M:
dos2unix <file-name>
вы можете вызвать это изнутри Perl или непосредственно в командной строке Unix.
чтобы преобразовать стиль DOS в окончание строки стиля UNIX:
for ($line in <FILEHANDLE>) {
$line =~ s/\r\n$/\n/;
}
или, чтобы удалить окончание строки стиля UNIX и / или DOS:
for ($line in <FILEHANDLE>) {
$line =~ s/\r?\n$//;
}
Это то, что решило мою проблему. ^M-это возврат каретки, и его можно легко избежать в скрипте на Perl.
while(<INPUTFILE>)
{
chomp;
chop($_) if ($_ =~ m/\r$/);
}
небольшой скрипт у меня есть для этого. Его модификация помогла отфильтровать некоторые другие непечатаемые символы в кросс-платформенных устаревших файлах.
#!/usr/bin/perl
# run this as
# convert_dos2unix.pl < input_file > output_file
undef $/;
$_ = <>;
s/\r//ge;
print;
в vi хит :
.
затем s/Control-VControl-M//g
.
Control-V
Control-M
это, очевидно, те ключи. Не заклинание.