Что-нибудь вроде 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 ответов
Вы можете использовать Блокнот ++.
Инструкции для рекурсивного преобразования каталога следующие:
- Меню: Поиск -> Найти в файлах...
- Каталог = каталог, который вы хотите преобразовать в формат Unix, рекурсивно. Например, C:\MyDir
- Найди что = \ r \ n
- Заменить на = \ n
- Режим поиска = Расширенный
- Нажмите "Заменить в файлах"
Решил через 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 }
Видеть
- как конвертировать файл из DOS в Unix
- Как преобразовать окончания строк DOS в UNIX на машине с Windows
- Powershell v2: заменить CRLF на LF
Для больших файлов вы можете использовать решения для буферизации в 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
С уважением,