Когда я запускаю конкретный сценарий SQL в средах Unix, я вижу символ «^ M» в конце каждой строки сценария SQL, поскольку он отображается в командной строке. Я не знаю, на какой ОС изначально был создан сценарий SQL.
Что вызывает это и как это исправить?
sql
unix
newline
line-endings
os-dependent
Пауль Райнерс
источник
источник
brew install dos2unix
когда у вас установлен homebrewИсправьте окончание строки
vi
, выполнив следующее::set fileformat=unix
:w
источник
^M
по какой-то причине это не удаляет s. ссылка на файл:/etc/timidity/fluidr3_gm.cfg
.Причина в разнице между тем, как ОС на базе Windows и ОС на базе Unix хранят маркеры конца строки.
Операционные системы на базе Windows, благодаря наследию DOS, сохраняют конец строки как пару символов -
0x0D0A
(возврат каретки + перевод строки). Операционные системы на основе Unix просто используют0x0A
( перевод строки ).^M
Вы видите визуальное представление0x0D
(а возврат каретки ).dos2unix поможет в этом. Возможно, вам также потребуется настроить источник сценариев, чтобы он был «дружественным к Unix».
источник
^M
? Почему "^"? Почему «М»?Самый простой способ - использовать
vi
.Я знаю, что это звучит ужасно, ноэто просто и уже установлено в большинстве сред UNIX. ^ M - это новая строка из среды Windows / DOS.из командной строки:
$ vi filename
Затем нажмите «
:
», чтобы перейти в командный режим.Искать и заменить все глобально - это
:%s/^M//g
« Нажмите и удерживайте элемент управления, затем нажмите V, затем M », который заменит ^ M ничем.Затем, чтобы написать и выйти, введите "
:wq
" Готово!источник
Попробуйте использовать dos2unix для удаления ^ M.
источник
В vi выполните
:%s/^M//g
Чтобы
^M
удерживать CTRLклавишу, нажмите Vзатем M(оба, удерживая клавишу Control), и^M
появится значок. Это найдет все вхождения и ничего не заменит.источник
:%s/^M/\r/g
Скрипт SQL изначально был создан в ОС Windows. Символы '^ M' являются результатом того, что Windows и Unix имели разные представления о том, что использовать для символа конца строки. Вы можете использовать perl в командной строке, чтобы исправить это.
источник
^ M обычно вызывается оператором новой строки Windows и переводится в Unix выглядит как ^ M. Команда dos2unix должна удалить их красиво
dos2unix [параметры] [-c convmode] [-o файл ...] [-n infile outfile ...]
источник
Sed еще более широко доступен и может делать подобные вещи, даже если dos2unix не установлен.
Вы также можете попробовать tr:
Вот результаты:
источник
Чтобы заменить символы ^ M в редакторе vi, используйте ниже
откройте текстовый файл, скажем t1.txt
Войдите в командный режим, нажав
shift + :
затем нажмите клавиши, как указано
%s/^M/\r/g
источник
Альтернативой
dos2unix
команде может быть использование стандартных утилит, напримерsed
.Например, dos to unix:
unix для dos:
источник
Вы можете удалить ^ M из файлов напрямую с помощью команды sed, например:
Если вас устраивают изменения, удалите файлы .bak:
источник
Преобразуйте окончания строк DOS / Windows (\ r \ n) в окончания строк Unix (\ n) с помощью tr:
Сообщение о замене новой строки из командной строки Unix
источник
od -a $file
полезен для изучения этих типов вопросов в Linux (аналогично dumphex выше).источник
В Perl, если вы не хотите устанавливать переменную $ / и использовать chomp (), вы также можете:
Мои два цента
источник
Другая команда vi, которая подойдет:
:%s/.$//
удаляет последний символ каждой строки в файле. Недостатком этой команды поиска и замены является то, что ей все равно, какой будет последний символ, поэтому будьте осторожны, чтобы не вызывать его дважды.источник