Как преобразовать разрывы строк в текстовом файле между форматами Windows и Unix / Linux?
У меня есть среда * nix, но мне нужно импортировать и экспортировать данные с разрывами строк в стиле Windows. Я думал, что для этого есть стандартная утилита или команда, но не могу ее найти.
Вы, наверное, ищете dos2unix
, unix2dos
, todos
или fromdos
в зависимости от вашего дистрибутива. Пакет Ubuntu / Debian todos
/fromdos
как часть тофродос посылка по памяти.
Один из вариантов - использовать unix2dos
(и dos2unix
для возврата) в командной строке.
Другой вариант - использовать текстовый редактор:
Для 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