Категории

воскресенье, 26 февраля 2012 г.

Аналоги на sed для dos2unix и unix2dos

Команда dos2unix служит для преобразования форматов текстовых файлов MSDOS к UNIX формату, а команда unix2dos служит для преобразования форматов текстовых файлов UNIX к формату MSDOS и Windows. Известно, что форматы текстовых файлов в DOS и в UNIX немного отличаются: в DOS все строки заканчиваются парой символов CR и LF (возврат каретки /r и перевод строки /n), а UNIX использует только символ LF перевод строки /n, справедливо полагая, что второй символ совершенно излишен. Чтобы не устанавливать эти консольные утилиты dos2unix и unix2dos можно воспользоваться вот такими несложными функциями написанными с использованием sed в sh:
#!/bin/sh
dos2unix() {
 sed -i '' -e 's/'"$(printf '\015')"'$//' "$1"
}

unix2dos() {
 sed -i '' -e 's|$|'"$(printf '\015')"'|' "$1"
}

# Сделать окончания строк LF (Unix)
dos2unix file.test

# Сделать окончания строк CR/LF (Win or Dos)
unix2dos file.test
Запустить аналог на sed для dos2unix прямо в консоли можно командой:
FreeBSD$ sed -i '' -e 's/'"`printf '\015'`"'$//' file.name
А аналог на sed для unix2dos прямо в консоли выглядит так:
FreeBSD$ sed -i '' -e 's|$|'"`printf '\015'`"'|' file.name
Обработать рекурсивно все php файлы в текущем каталоге:
FreeBSD$ find . -name "*.php" -type f -exec sed -i '' -e 's/'"`printf '\015'`"'$//' {} \;
Причины НЕ устанавливать данные консольные утилиты могут быть разными, например невозможность их установить (случай с VPS или web хостингом), спортивный интерес ну или просто лень :)