У меня есть сценарий, который добавляет новые поля к существующему CSV, однако в конце старых строк появляются символы ^M
, поэтому новые поля заканчиваются новой строкой, а не той же. Как удалить ^M
символов из файла CSV с помощью Perl?В Perl, как удалить^M из файла?
ответ
Вы узнали, что можете o сделать это:
$line=~ tr/\015//d;
Это отлично сработало для меня! – onaclov2000
не так читается, как '\ r' - любой, кто смотрит на это (или сам через год), был бы рад комментарию о том, что он делает – plusplus
^M - возврат перевозки. Вы можете сделать это:
$str =~ s/\r//g
Чтобы преобразовать DOS стиль UNIX стиль окончаниях строк:
for ($line in <FILEHANDLE>) {
$line =~ s/\r\n$/\n/;
}
Или, чтобы удалить UNIX и/или DOS стиль строки окончаний:
for ($line in <FILEHANDLE>) {
$line =~ s/\r?\n$//;
}
не удастся ли перенести тоже? –
Думаю, это зависит от вашей цели. Я отредактировал, чтобы показать обе стратегии. – spoulson
Or a 1-футовый:
perl -p -i -e 's/\r\n$/\n/g' file1.txt file2.txt ... filen.txt
В vi hit :
.
Then s/Control-VControl-M//g
.
Control-V
Control-M
, очевидно, эти ключи. Не повторяйте это.
Плохая идея включать непечатаемые символы, такие как возврат каретки в исходном коде как это.Гораздо лучше использовать escape-выход, который (а) легко увидеть, и (б) не потеряется, если источник переформатирован. –
Слегка связаны между собой, но удалить^M из командной строки с помощью Perl, выполните следующие действия:
perl -p -i -e "s/\r\n/\n/g" file.name
Это один вкладыш заменяет все^символы M:
dos2unix <file-name>
Вы можете вызвать эту изнутри Perl или непосредственно в приглашении Unix.
Я предпочитаю более общее решение, которое будет работать с входами DOS или Unix. Предполагая, что вход от STDIN:
while (defined(my $ln = <>))
{
chomp($ln);
chop($ln) if ($ln =~ m/\r$/);
# filter and write
}
Это то, что решило мою проблему.^M - возврат каретки, и его можно легко избежать в сценарии Perl.
while(<INPUTFILE>)
{
chomp;
chop($_) if ($_ =~ m/\r$/);
}
Удаляет ли это^M из файла CSV? Изменение входного файла? Создает ли какой-нибудь выходной файл, который их не будет иметь? –
Маленький сценарий, который у меня есть для этого. Модификация его помогла отфильтровать некоторые другие непечатаемые символы в кросс-платформенных устаревших файлах.
#!/usr/bin/perl
# run this as
# convert_dos2unix.pl <input_file> output_file
undef $/;
$_ = <>;
s/\r//ge;
print;
- 1. Формат файла из текстового файла в Perl
- 2. Получить дескриптор файла из файла в Perl
- 3. Fetching путь файла из Perl '.rc' файла
- 4. MD5 файла из потока. Perl
- 5. Как изменить кодировку файла из Perl-скрипта
- 6. Perl regexes из файла - как использовать $ 1?
- 7. Perl - как grep блок текста из файла
- 8. Perl: Как вернуть верхнюю строку из файла
- 9. Perl Вывод из ошибок файла
- 10. Создание perl из файла index.html
- 11. Выполнение файла perl из php
- 12. Написание файла SQL из Perl
- 13. Запуск пакетного файла из Perl (ActiveState Perl в Windows)
- 14. Perl извлечения шаблона из файла
- 15. Сравнение шаблонов из файла в perl
- 16. Извлечь двоичные данные из файла в Perl
- 17. Perl чтение из файла в хэш
- 18. Разбивает строку из файла в Perl
- 19. Perl - загрузка записей из файла в хэш
- 20. Удаление строки из огромного файла в Perl
- 21. берет информацию из файла CSV в Perl
- 22. Grabbing Chunks данных из файла в Perl
- 23. Выполнение скриптов Perl из файла в linux
- 24. Read Массив из файла в Perl-массив
- 25. Проблема с хэшами из файла в Perl
- 26. Из файла теста Perl, как я могу проверить содержимое файла?
- 27. Чтение данных из файла в Perl
- 28. Введите список из файла в Perl
- 29. Редактирование файла в perl
- 30. как умножить значение в массиве из текстового файла в perl
Используйте 'binmode (STDIN, ": CRLF")' или 'PerlIO =: Unix: crlf' (см [http://stackoverflow.com/a/21320709/424632]). – musiphil