Как преобразовать окончания строк из 0D0A в 0A и наоборот
Добавил(а) microsin
Текстовые файлы DOS/Windows традиционно завершают строки парой специальных символов 0x0D Carriage Return (CR, возврат каретки, \r) 0x0A Line Feed (LF, перевод строки, \n). Текстовые файлы Unix/Linux завершают строки одним символом 0x0A. Чтобы преобразовать текстовые файлы между форматами строк DOS и Unix проще всего использовать специальную утилиту dos2unix [2]. Кроме того, существуют также и другие способы преобразования [1].
Вы можете использовать следующие инструменты:
• dos2unix (эта утилита также известна как fromdos) – преобразует текст из формата DOS в формат Unix. • unix2dos (эта утилита также известна как todos) – преобразует текст из формата Unix в формат DOS. • Команда sed. • Команда tr. • Perl one liner.
[dos2unix/unix2dos]
0D0A -> 0A. Следующая команда преобразит файл myfile.txt из формата DOS в формат Unix:
$ dos2unix myfile.txt
Эта команда перезапишет исходный файл myfile.txt. Если нужно сохранить исходный файл, чтобы преобразованный файл сохранился в новом файле, используйте следующую команду (здесь input.txt исходный файл, output.txt преобразованный файл):
Команда tr позволяет преобразовать файлы из формата DOS в формат Unix:
tr -d '\r' < input.file > output.file
[Perl One Liner]
Следующая команда позволяет преобразовать файлы из формата DOS в формат Unix:
perl -pi -e 's/\r\n/\n/g' input.file
[Команда sed]
Следующая команда позволяет преобразовать файлы из формата Unix в формат DOS:
$ sed 's/$'"/`echo \\\r`/" input.txt > output.txt
Следующая команда удалит символы ^M и CR:
# GNU/sed syntax to update file in-place
sed -i 's/\r$//g' input
# macOS/*BSD syntax to update file in-place
sed -i'.BAK' 's/\r$//g' input
sed "s/$(printf '\r')\$//" in.txt > out.txt
sed -i'BAK' "s/$(printf '\r')\$//" in.txt
Замечание: команда sed может не работать на некоторых версиях Unix/Linux.
Следующая команда позволяет преобразовать файлы из формата DOS в формат Unix:
$ sed 's/^M$//' input.txt > output.txt
Примечание: если Вы используете командную строку BASH shell, то для ввода специальных символов нажмите Ctrl-V и затем Ctrl-M.
[Ссылки]
1. HowTo: UNIX / Linux Convert DOS Newlines CR-LF to Unix/Linux Format site:cyberciti.biz. 2. Dos2Unix / Unix2Dos - Text file format converters site:dos2unix.sourceforge.io. 3. LF will be replaced by CRLF in git - What is that and is it important? site:stackoverflow.com. 4. Ошибка warning: LF will be replaced by CRLF в Git как решить site:unlix.ru. 5. [Git] CRLF will be replaced by LF site:mroldan.medium.com.