Назад | Перейти на главную страницу

Как преобразовать разрывы строк в текстовом файле между форматами Windows и Unix / Linux?

Как преобразовать разрывы строк в текстовом файле между форматами Windows и Unix / Linux?

У меня есть среда * nix, но мне нужно импортировать и экспортировать данные с разрывами строк в стиле Windows. Я думал, что для этого есть стандартная утилита или команда, но не могу ее найти.

Вы, наверное, ищете dos2unix, unix2dos, todos или fromdos в зависимости от вашего дистрибутива. Пакет Ubuntu / Debian todos/fromdos как часть тофродос посылка по памяти.

Один из вариантов - использовать unix2dosdos2unix для возврата) в командной строке.

Другой вариант - использовать текстовый редактор:
Для vi:: установите ff = dos, чтобы установить окончание строки как окончание строки dos.
Для emacs: C-x [ENTER] f dos [ENTER]

Для вашего любимого редактора на основе графического интерфейса (например, jedit) я рекомендую проверить руководство или Google.

Наконец, если вы не хотите иметь дело с текстовым редактором и просто делаете это с помощью более распространенных утилит и тому подобного (или у вас не установлен unix2dos):

tr -d '\r' < infile > outfile перейти из Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txt перейти из Unix -> Windows как tr не может перейти с Unix на Windows.

Отредактируйте его в Vim и используйте set fileformat команда.

  • MS-DOS / Windows (CR + LF ломается) до * nix (только LF ломается)

    :set fileformat=unix
    :wq
    
  • * nix в MS-DOS / Windows

    :set fileformat=dos
    :wq
    

Это то, что я использую, как и Chealion, для преобразования окончаний строк из Windows в Unix:

tr -d \\015 < windows > unix

Сделать это с POSIX сложно:

  • POSIX Sed не поддерживает \r или \15. Даже если это так, вариант на месте -i не POSIX

  • POSIX Awk поддерживает \r и \15, Однако -i inplace опция не POSIX

  • d2u и dos2unix не Утилиты POSIX, но бывший является

  • POSIX ex не поддерживает \r, \15, \n или \12

Чтобы удалить возврат каретки:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Чтобы добавить возврат каретки:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file