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

33

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

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

alexeit
источник

Ответы:

42

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

saschabeaumont
источник
4
В случае, если кто-то сталкивается с этим вопросом в поисках решений для Windows, основной сайт для него dos2unix- waterlan.home.xs4all.nl/dos2unix.html , и он также работает в Windows.
Уомбл
Вы можете установить dos2unix/unix2dos на Mac OS X, используя Homebrew . С установленным Homebrew, команда brew install dos2unix, которая использует эту формулу .
Рори О'Кейн
24

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

Другой способ заключается в использовании текстового редактора:
Для vi:: установите ff = dos, чтобы установить окончание строки как окончание строки dos.
Для emacs: Cx [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.

Chealion
источник
dos2unix сделал свое дело, однако спасибо за утилиту tr, она могла бы сэкономить столько времени в прошлом!
alexeit
Если файл имеет неоднозначные окончания строк, убедитесь , чтобы загрузить его в надлежащее ff: :e ++ff=unix. По крайней мере, это имеет смысл для dos -> unixпреобразования.
x-yuri
Этот awk один лайнер учит человека ловить рыбу, спасибо за это. Я буду немного менее голодным в будущем
Гарет Дэвидсон
13

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

  • MS-DOS / Windows (CR + LF разрывы) до * nix (LF разрывы только)

    :set fileformat=unix
    :wq
    
  • * nix для MS-DOS / Windows

    :set fileformat=dos
    :wq
    
nedm
источник
Будьте осторожны при использовании этого, если в файле еще нет разрыва строки в последней строке; vim добавит его, если вы не знаете, как сказать, что нет.
CesarB
После нескольких часов попыток найти другое решение, этот спасатель мне был нужен. Подтвержденное поведение на OS X с Yosemite hexdump -C- также подтверждено, что это не является липким - это установлено для viсеанса
Techmag
8

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

tr -d \\015 < windows > unix
мистифицировать
источник
Афиша хотела, чтобы Unix заканчивался строкой окон. И вы на несколько лет опоздали с ответом.
ot--
5
Кому какое дело, если "годы опаздывают"? Это все еще работает, и это все еще применимо к вопросу. Я просто добавил еще один вариант для читателей, которые сталкиваются с этим, как я. Кроме того, его вопрос просит Windows -> Unix, а его описание просит Unix -> Windows. пожимает плечами
Джош
Правильно. Возможно, вы добавите другую команду tr для преобразования unix в windows.
ot--
Я попытался отменить downvote, но он сказал, что он заблокирован, пока статья не будет отредактирована.
ot--
@ ott-- нет проблем, я проголосовал за тебя. ... подожди, теперь я не могу за меня проголосовать! ... черт ... :)
Алоис Махдал
1

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

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

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

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

  • POSIX бывший не поддерживает \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
Стивен Пенни
источник