Як конвертувати розриви рядків у текстовому файлі між форматами Windows та Unix / Linux?


33

Як конвертувати розриви рядків у текстовому файлі між форматами Windows та Unix / Linux?

У мене є середовище * nix, але мені потрібно імпортувати та експортувати дані з розривами рядків у стилі Windows. Я думав, що для цього буде стандартна утиліта або команда, але я не можу її знайти.

Відповіді:


42

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


4
У разі, якщо хтось стикається з цим питанням, шукає рішення для Windows, веб-майданчиком для поточного потоку dos2unixє waterlan.home.xs4all.nl/dos2unix.html , і він працює і в Windows.
живіт

Ви можете встановити dos2unix/unix2dos на Mac OS X за допомогою Homebrew . Якщо встановлено Homebrew, команда є brew install dos2unix, яка використовує цю формулу .
Rory O'Kane

24

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

Іншим є використання текстового редактора:
Для vi:: set ff = dos, щоб встановити закінчення рядків до кінця рядків dos.
Для emacs: Cx [ENTER] f dos [ENTER]

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

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

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


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
    

Будьте обережні, використовуючи це, якщо файл не має розриву рядка в останньому рядку; vim додасть його, якщо ви не знаєте, як сказати.
CesarB

Після годин спроб будь-якого іншого рішення це було рятівником, який мені знадобився. Підтверджена поведінка на OS X Yosemite з hexdump -C- також підтвердила, що це неvi
липко

8

Це те, що я використовую, як і Chealion, для перетворення Windows в закінчення рядків Unix:

tr -d \\015 < windows > unix

Плакат хотів, щоб Unix закінчував закінчення рядків Windows. І ти запізнився на кілька років з тобою.
ott--

5
Кому байдуже, чи не пізніше "на роки"? Це все ще працює, і це все ще застосовно до питання. Я просто додав ще один варіант для читачів, які натрапляють на нього, як я. Також його запитання задає Windows -> Unix, а його опис запитує Unix -> Windows. знизати плечима
Джош

Правильно. Можливо, ви додали іншу команду tr для перетворення unix у Windows тоді.
ott--

Я спробував скасувати нижчу заявку, але вона сказала, що вона заблокована до редагування статті.
ott--

@ ott-- немає проблем, я виступав за вас. ... зачекайте, зараз я не можу підтримати мене! ... dang ... :)
Alois Mahdal

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.