- Преобразование окончаний строк Unix в Windows
- 12 ответов
- Конвертация файлов (Удалить ^M) из Windows в Linux формат
- Установка dos2unix в Ubuntu:
- Пример использования dos2unix
- Как преобразовать DOS или Windows перевод строки (возврата каретки и перевода строки) в Unix перевод строки (LF) в bash-скрипт?
- Ответы — Как преобразовать DOS или Windows перевод строки (возврата каретки и перевода строки) в Unix перевод строки (LF) в bash-скрипт? / How to convert DOS/Windows newline (CRLF) to Unix newline (LF) in a Bash script?
Преобразование окончаний строк Unix в Windows
Недавно я вернулся в Windows из Linux. У меня есть файлы с CRLF, некоторые с LF и некоторые из них смешанные. Есть ли утилита, которая поможет мне найти все мои файлы, связанные с Unix, и преобразовать их в соответствующие файлы с завершенным CRLF?
Утилита должна работать в Windows, а не в Linux. Я уже переехал. Я бы предпочел не устанавливать Cygwin , если я могу его избежать.
12 ответов
Вы можете конвертировать их с помощью утилиты unix2dos на вашей платформе Linux. Существуют версии unix2dos для Windows .
Если у вас установлен Perl, вы также можете использовать этот один вкладыш:
Вот простой и быстрый способ.
Перетащите текстовый файл в Chrome (я не знаю других браузеров), а затем вырезаем и вставляем обратно в исходный файл:)
Например: sfk addcr -dir . -file .txt -norec
изменяет LF-окончания в CR /LF для Windows, на всех .txt-файлах текущего каталога, но НЕ внутри подкаталогов (без рекурсии).
Но эта программа намного больше, чем просто.
В Cygwin вы можете конвертировать между файлами Unix и DOS AKA Windows с помощью двух встроенных утилит:
Преобразование в формат DOS CR /LF:
Преобразуйте обратно в формат Unix CR:
Файл остается на месте с тем же именем.
Я собираюсь бросить это решение там. Гит сделает это. Смотрите это сообщение
Итак, теоретически вы можете сделать это для преобразования всего дерева
Измените crlf на lf , если вы хотите пойти в другую сторону. ПРИМЕЧАНИЕ: вы еще не закончили, продолжайте читать
Введите git status , чтобы увидеть, какие файлы будут затронуты. Возможно, вам придется добавить строки, например
и т. д. до .gitattributes , чтобы избежать преобразования определенных файлов. Вы также можете указать определенные файлы как текст
Затем просто повторите эти 2 строки после редактирования .gitattributes
Затем снова используйте git status , чтобы узнать, какие файлы будут изменены. Когда вы уверены, что все файлы, которые вы хотите затронуть, перечислены в git status , а затем зафиксируйте
теперь проверьте все файлы снова
Теперь у них должно быть все, что у вас есть,
** ПРИМЕЧАНИЕ. Если вы уже использовали git, пропустите первые три команды git. Если вы не использовали git, теперь вы можете удалить файл .gitattributes и .git .
** Резервное копирование файлов: git rm —cached -r удаляет их все (хотя они теоретически в вашем git repo (папка .git ), так как они восстанавливаются с помощью последней команды git reset —hard . Просто, поскольку файлы удаляются, лучше всего их резервировать.
В моем дистрибутиве Linux есть две небольшие утилиты: fromdos и todos , которые я использую для этой задачи.
Используйте текстовый редактор, который понимает оба конца строки, например SciTE или Notepad ++ , если вам не нужно преобразовывать всю строку, заканчивающуюся во всех ваших файлах, но просто не хотите видеть весь файл сгруппирован в первую строку.
Существует много способов перевода символов eoln в файлы TEXT, и у каждого есть любимый.
Но я всегда переношу файлы с Linux на Windows в режиме BINARY, затем открываю файлы TEXT в Windows с помощью редактора, способного открывать оба типа, и при необходимости сохранять их в любой форме.
Я использовал редактор файлов Programmers для этого, но Notepad ++ тоже может это сделать. WordPad также полезен [по крайней мере, для просмотра файлов с завершенным LF].
Я думаю о простых текстовых файлах, которые могут возникнуть в Linux, и их нужно читать в стандартном (стандартном) мире Windows. Я не уверен, что вы имели в виду под «unix-touched files».
Чтобы предложить дополнительные параметры (хотя мне больше всего понравился запрос пользователя user45832 ):
Онлайн-преобразователи
Пакетный /DOS однострочный (удаляет пустые строки) :
Powershell:
Получил последние два отсюда
Преобразование окончаний строки Unix в конец строки Windows:
Преобразование окончаний строк Windows в конец строки Unix:
Старые версии awk не включают sub . В таких случаях используйте ту же команду, но замените awk на gawk или nawk .
В Википедии есть решение в cmd:
В PowerShell существуют различные способы сделать это, изменив то, что было сделано в на этом вопросе .
Это также можно сделать в VBScript и JScript , которые также являются инструментами, которые уже доступны в Windows без установки стороннего приложения.
Я использовал, чтобы открыть файл в ‘edit’ и сохранить, поскольку это было выполнено .
Конвертация файлов (Удалить ^M) из Windows в Linux формат
Удалить в тексте ^M необходимо при переносе файлов из Windows в Unix в местах переноса строк появляются символы ^M. Это происходит из-за отличия символов переноса строк в Windows, Unix и MAC.
Форматы текстовых файлов в DOS и в UNIX отличаются:
в DOS строки заканчиваются парой символов CR и LF (возврат каретки /r и перевод строки /n)
в UNIX использует только символ LF перевод строки /n.
Установка dos2unix в Ubuntu:
Просмотрим man команды синтаксис и ключи:
Пример использования dos2unix
Конвентировать файл filein.txt из Windows формата в Unix формат с созданием нового файла fileout.txt :
Конвентировать файл file.txt из Windows формата в Unix формат с замещением существующего файла:
Конвентировать файл filein.txt из Windows CP1252 в Unix UTF-8 (Unicode) fileout.txt :
Конвентировать все файлы с расширением *.txt в текущей директории с сохранением времени создания файлов:
Как преобразовать DOS или Windows перевод строки (возврата каретки и перевода строки) в Unix перевод строки (LF) в bash-скрипт?
Как я могу программно (то есть, не используя vi ) преобразовать DOS/Windows newlines в Unix?
Команды dos2unix и unix2dos недоступны в некоторых системах. Как я могу эмулировать их с помощью таких команд, как sed / awk / tr ?
Ответы — Как преобразовать DOS или Windows перевод строки (возврата каретки и перевода строки) в Unix перевод строки (LF) в bash-скрипт? / How to convert DOS/Windows newline (CRLF) to Unix newline (LF) in a Bash script?
Используя AWK вы можете сделать:
Используя Perl вы можете сделать:
Вы можете использовать tr для преобразования из DOS в Unix; однако вы можете сделать это безопасно только в том случае, если CR появляется в вашем файле только как первый байт пары байтов CRLF. Так обычно и бывает. Затем вы используете:
Обратите внимание, что имя DOS-file отличается от имени UNIX-file ; если вы попытаетесь использовать одно и то же имя дважды, вы не получите никаких данных в файле.
Вы не можете сделать это наоборот (со стандартным ‘tr’).
Если вы знаете, как ввести возврат каретки в скрипт ( control-V , control-M для ввода control-M), то:
где ‘^M ‘ — это символ control-M. Вы также можете использовать механизм bash ANSI-C Quoting для указания возврата каретки:
Однако, если вам придется делать это очень часто (грубо говоря, несколько раз), гораздо разумнее установить программы преобразования (например dos2unix и unix2dos , или, возможно dtou и utod ) и использовать их.
посмотрите здесь примеры использования sed :
Используйте sed -i для преобразования на месте, например sed -i ‘s/. /’ file .
Решения, опубликованные до сих пор, касаются только части проблемы , преобразования CRLF DOS/Windows в LF Unix; часть, которую они упускают, состоит в том, что DOS использует CRLF в качестве разделителя строк , в то время как Unix использует LF в качестве Терминатора строк . Разница в том, что файл DOS (обычно) не будет иметь ничего после последней строки в файле, в то время как Unix будет. Чтобы правильно провести конвертацию, вам необходимо добавить этот final LF (если только файл не имеет нулевой длины, т. е. в нем вообще нет строк). Мое любимое заклинание для этого (с небольшой добавленной логикой для обработки файлов, разделенных CR в стиле Mac, а не файлов, которые уже находятся в формате unix) — это немного perl:
Обратите внимание, что это отправляет Unixified версию файла в stdout. Если вы хотите заменить файл на Unixified версию, добавьте флаг perl -i .