Подтвердить что ты не робот

В Perl, как удалить ^ M из файла?

У меня есть script, который добавляет новые поля в существующий CSV, однако символы ^M появляются в конце старых строк, поэтому новые поля заканчиваются новой строкой, а не той же. Как удалить символы ^M из файла CSV с помощью Perl?

4b9b3361

Ответ 1

Вы узнали, что вы также можете это сделать:

$line=~ tr/\015//d;

Ответ 2

^ M - возврат каретки. Вы можете сделать это:

$str =~ s/\r//g

Ответ 3

Или 1-лайнер:

perl -p -i -e 's/\r\n$/\n/g' file1.txt file2.txt ... filen.txt

Ответ 4

Немного несвязанный, но чтобы удалить ^ M из командной строки с помощью Perl, сделайте следующее:

perl -p -i -e "s/\r\n/\n/g" file.name

Ответ 5

Я предпочитаю более общее решение, которое будет работать либо с входом DOS, либо с Unix. Предполагая, что вход от STDIN:

while (defined(my $ln = <>))
  {
    chomp($ln);
    chop($ln) if ($ln =~ m/\r$/);

    # filter and write
  }

Ответ 6

Этот один вкладыш заменяет все символы ^ M:

dos2unix <file-name>

Вы можете вызвать это изнутри Perl или непосредственно в приглашении Unix.

Ответ 7

Чтобы преобразовать стиль DOS в конец строки стиля UNIX:

for ($line in <FILEHANDLE>) {
   $line =~ s/\r\n$/\n/;
}

Или, чтобы удалить окончания строки стиля UNIX и/или DOS:

for ($line in <FILEHANDLE>) {
   $line =~ s/\r?\n$//;
}

Ответ 8

Вот что решило мою проблему. ^ M - возврат каретки, и его можно легко избежать в Perl script.

while(<INPUTFILE>)
{
     chomp;
     chop($_) if ($_ =~ m/\r$/);
}

Ответ 9

Маленький script У меня для этого. Модификация его помогла отфильтровать некоторые другие непечатаемые символы в кросс-платформенных устаревших файлах.

#!/usr/bin/perl
# run this as
# convert_dos2unix.pl < input_file > output_file
undef $/;
$_ = <>;
s/\r//ge;
print;

Ответ 10

В vi hit :.

Тогда s/Control-VControl-M//g.

Control-V Control-M - это, очевидно, те ключи. Не повторяйте это.