Это вызывается конечными символами строки DOS/Windows. Как сказанный Andy Whitfield, команда dos2unix Unix поможет решить проблему. Если Вы хотите больше информации, можно прочитать страницы справочника для той команды.
Другой vi управляет, чтобы это сделало: :%s/.$//
Это удаляет последний знак каждой строки в файле. Недостаток к этому поиску и команде замены состоит в том, что это не заботится, каков последний знак, так бояться называть его дважды.
od -a $file
полезно для исследования тех типов вопроса на Linux (подобный dumphex в вышеупомянутом).
C:\tmp\text>dos2unix hello.txt helloUNIX.txt
Sed еще более широко доступен и может сделать такого рода вещь также, если dos2unix не установлен
C:\tmp\text>sed s/\r// hello.txt > helloUNIX.txt
, Вы могли бы также попробовать TR:
cat hello.txt | tr -d \r > helloUNIX2.txt
Вот результаты:
C:\tmp\text>dumphex hello.txt
00000000h: 48 61 68 61 0D 0A 68 61 68 61 0D 0A 68 61 68 61 Haha..haha..haha
00000010h: 0D 0A 0D 0A 68 61 68 61 0D 0A ....haha..
C:\tmp\text>dumphex helloUNIX.txt
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..
00000010h: 68 61 68 61 0A haha.
C:\tmp\text>dumphex helloUNIX2.txt
00000000h: 48 61 68 61 0A 68 61 68 61 0A 68 61 68 61 0A 0A Haha.haha.haha..
00000010h: 68 61 68 61 0A haha.
Сценарий SQL был первоначально создан в Windows OS. '^M' символы являются результатом Windows и Unix, имеющего различные идеи о том, что использовать для символа конца строки. Можно использовать жемчуг в командной строке для фиксации этого.
perl -pie 's/\r//g' filename.txt
В vi сделайте :%s/^M//g
Для получения эти ^M
, содержат CTRL ключ, нажимают V тогда M (Оба при содержании клавиши CTRL), и эти ^M
появится. Это найдет все случаи и ничем заменит их.
Попытайтесь использовать dos2unix для снятия изоляции с ^M.
Самый легкий путь состоит в том, чтобы использовать vi
. <забастовка> я знаю что ужасные звуки, но забастовка> его простое и уже установленный на большинстве сред UNIX. ^M является новой строкой от среды Windows/DOS.
от командной строки: $ vi filename
Тогда нажимают" :
" для получения до командного режима.
Поиск и Замена все Глобально :%s/^M//g
" Нажатие, и держите управление, тогда нажимают V тогда M", который ничем заменит ^M.
Затем, чтобы записать и выйти входят" :wq
" Сделанный!
Причиной является различие между тем, как основанная ОС на базе Windows и основанная на Unix ОС хранят маркеры конца строки.
основанные на Windows операционные системы, благодаря их наследию DOS, хранят конец строки как пару символов - 0x0D0A
(возврат каретки + перевод строки). Основанные на Unix операционные системы просто используют 0x0A
( перевод строки ). ^M
Вы видите, визуальное представление 0x0D
( возврат каретки ).
dos2unix поможет с этим. Вероятно, также необходимо скорректировать источник сценариев, чтобы быть 'благоприятными для Unix'.
Зафиксируйте окончания строки в vi
путем выполнения следующего:
:set fileformat=unix
:w
^M обычно вызывается новыми строками оператора Windows и переводится на Unix, похож на ^M. Команда dos2unix должна удалить их приятно
dos2unix [опции] [-c convmode] [-o файл...] [-n infile outfile...]