Что-нибудь вроде DOS2Unix для Windows?

У меня есть несколько сценариев оболочки, созданных для Windows, и я хочу запустить Dos2Unix на них.

Но поскольку я прочитал, что Dos2Unix работает в среде Linux, есть ли способ конвертировать мои файлы в формат UNIX при работе в Windows?

Я уже установил CYGWIN, но сталкиваюсь с некоторыми проблемами:

Администратор @SGH735082N ~
$ pwd
/ Главная / Администратор

Администратор @SGH735082N ~
$ cd C:\CVS Code

Администратор @SGH735082N /cygdrive/c/CVS
$ dos2Unix BLPDB000
BLPDB000:
Обработка dos2Unix BLPDB000: нет такого файла или каталога

Администратор @SGH735082N /cygdrive/c/CVS
$ dos2Unix -h
dos2Unix: неверный аргумент -h: неизвестная опция

Администратор @SGH735082N /cygdrive/c/CVS
$ dos2Unix --help
dos2Unix версия 0.1.3
  преобразует окончания строк текстовых файлов из
  Стиль DOS (0x0d 0x0a) в стиле UNIX (0x0a)

Использование: dos2Unix [ОПЦИЯ...] [список входных файлов...]

Основные параметры (не все могут применяться)
  -A, --auto Выходной формат будет противоположен автоопределенному источнику
                 формат
  -D, --u2d Вывод будет в формате DOS
  --unix2dos Вывод будет в формате DOS
  -U, --d2u Вывод будет в формате UNIX
  --dos2unix Вывод будет в формате UNIX
  --force Игнорировать обнаружение двоичных файлов
  --safe Не изменять двоичные файлы

Варианты справки
  -?, --help Показать это справочное сообщение
  --usage Показать краткое сообщение об использовании
  --version Показать информацию о версии
  --license Показать лицензионную информацию

Другие аргументы
  [список входных файлов...] для каждого файла в списке, конвертировать на месте.
                             Если ничего не указано, используйте stdin / stdout

Администратор @ SGH735082N / cygdrive / c / CVS
$

Администратор @SGH735082N /cygdrive/c/CVS
$ dos2Unix  -oBLPDB000
dos2Unix: неверный аргумент -oBLPDB000: неизвестный параметр

Администратор @SGH735082N /cygdrive/c/CVS
$ dos2Unix -k BLPDB000
dos2Unix: неверный аргумент -k: неизвестная опция

Администратор @SGH735082N /cygdrive/c/CVS
$ dos2Unix BLPDB000.txt
BLPDB000.txt:
Обработка dos2Unix BLPDB000.txt: Нет такого файла или каталога

Администратор @SGH735082N /cygdrive/c/CVS
$ pwd
/ Cygdrive / с / CVS

Спасибо

11 ответов

Вы можете использовать Блокнот ++.

Инструкции для рекурсивного преобразования каталога следующие:

  1. Меню: Поиск -> Найти в файлах...
  2. Каталог = каталог, который вы хотите преобразовать в формат Unix, рекурсивно. Например, C:\MyDir
  3. Найди что = \ r \ n
  4. Заменить на = \ n
  5. Режим поиска = Расширенный
  6. Нажмите "Заменить в файлах"

Решил через Notepad++.

Перейдите в: Правка -> Преобразование EOL -> Unix.

Если у вас есть perl Установив, вы можете просто запустить:

perl -i -p -e "s/\r//" <filename> [<filename2> ...]

Есть как минимум два ресурса:

  • dos2unix на SourceForge, который, похоже, активно поддерживается (по состоянию на 2015 год) и имеет предварительно скомпилированные выпуски для Windows, как 32-, так и 64-разрядные. Также включает в себя unix2dos, mac2unix и unix2mac.
  • CygUtils от GnuWin32, которые являются различными утилитами, разветвленными от Cygwin, который включает в себя dos2unix, а также несколько других связанных утилит. Этот пакет активно не поддерживается (последнее обновление было в 2008 году).

В PowerShell так много решений, учитывая множество инструментов на платформе.NET.

С путем к файлу в $file = 'path\to\file' мы можем использовать

[IO.File]::WriteAllText($file, $([IO.File]::ReadAllText($file) -replace "`r`n", "`n"))

или

(Get-Content $file -Raw).Replace("`r`n","`n") | Set-Content $file -Force

Чтобы сделать это для всех файлов, просто передайте список файлов вышеуказанным командам:

Get-ChildItem -File -Recurse | % { (Get-Content -Raw -Path $_.Fullname).Replace ("`r`n", "`n") | Set-Content -Path $_.Fullname }

Видеть

Для больших файлов вы можете использовать решения для буферизации в Replace CRLF using powershell

Я использовал grepWin:

  • Откройте папку с вашими файлами в grepWin
  • В разделе "Поиск"
    • выберите "Поиск по регулярному выражению"
    • Поиск -> \r\n
    • Заменить на -> \n
  • Нажмите "Поиск", чтобы подтвердить, какие файлы будут затронуты, затем "Заменить".
  • Откройте файл с помощью Notepad++
  • Хит Ctrl+F
  • Выберите режим поиска "Регулярное выражение".
  • Искать -> \r\n
  • Заменить на -> \n
  • На вкладке «Заменить» нажмите «Заменить все».

Поиск и замена Regex не сработали для меня по какой-либо причине, однако решены для одного файла (~ / .bashrc) в Notepad ++, установив Encoding -> UTF-8 и повторно сохранив. Не такой масштабируемый, но, надеюсь, избавит от головной боли для быстрого преобразования.

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

Если файл будет находиться в репозитории git, вы можете применить к нему окончания строк с помощью файла .gitattributes. Смотрите: как заставить git не менять окончания строк для одного конкретного файла?

Любой хороший текстовый редактор в Windows поддерживает сохранение текстовых файлов с переводом строки в конце строки.

Для автоматического преобразования текстовых файлов из DOS/Windows в окончание строк UNIX можно использовать пакетный файл JREPL.BAT, написанный Дейвом Бенхэмом и представляющий собой гибрид пакетного файла / JScript для запуска замены регулярного выражения в файле с использованием рабочего JScript. даже в Windows XP.

Один файл можно преобразовать из DOS/Windows в UNIX, например:

jrepl.bat "\r" "" /M /F "Name of File to Modify" /O -

В этом случае все символы возврата каретки удаляются из файла для изменения. Конечно, также можно было бы использовать"\r\n" как строка поиска и "\n" как заменить строку, чтобы удалить только возврат каретки слева от перевода строки, если файл содержит символы возврата каретки также где-то еще, что не должно удаляться при преобразовании ограничителей строки.

Несколько файлов каталога или целого дерева каталогов можно преобразовать из DOS/Windows в текстовые файлы UNIX с помощью команды FOR для CALL пакетного файла JREPL.BAT для каждого файла, соответствующего шаблону подстановки.

Пример пакетного файла для преобразования всех файлов *.sh в текущем каталоге из DOS/Windows в UNIX.

@for %%I in (*.sh) do @call "%~dp0jrepl.bat" "\r" "" /M /F "%%I" /O -

Пакетный файл JREPL.BAT должен храниться в том же каталоге, что и пакетный файл, содержащий эту командную строку.

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • jrepl.bat /?
  • call /?
  • for /?

Вы используете очень старую версию dos2unix на Cygwin. Cygwin 1.7 перешел на новую версию dos2unix, такую ​​же, как и в большинстве дистрибутивов Linux, около двух лет назад. Поэтому обновите ваш dos2unix с помощью программы установки Cygwin. Проверьте, что вы получаете версию 6.0.3.

Также доступны родные порты Windows для dos2unix (win32 и win64). См. http://waterlan.home.xs4all.nl/dos2unix.html

С уважением,

Другие вопросы по тегам