October 2030
| |
|
1 |
2 |
3 |
4 |
5 |
| 6 |
7 |
8 |
9 |
10 |
11 |
12 |
| 13 |
14 |
15 |
16 |
17 |
18 |
19 |
| 20 |
21 |
22 |
23 |
24 |
25 |
26 |
| 27 |
28 |
29 |
30 |
31 |
|
1/11/17 02:13 am
Универсальный конвертер символов перевода строки (Windows\Mac\Linux)
Ух и задолбался же я с этими самыми переводами строк! Возникла тут задачка конвертировать кучу огромную текстовых файлов из DOS/Windows (перенос строки CR+LF, h0D, h0A), старого Mac-формата (CR, h0D), который, вопреки утверждениям Википедии и других авторитетных источников использует не только вышедшие из употребления Маки, в формат Linux (LF, h0A). Желательно иметь возможность еще и обратной/произвольной конвертации между всем этим зоопарком. Сначала я, конечно, попробовал написать универсальный скрипт с помощью sed, но никакой универсальности не получилось. На C++, ой, после C# это все равно, что пересесть с мерседеса на велосипед. На C# задача в строчки 4 кода решается, но тащить ради маленькой утилиты Mono, это уж слишком
В общем нашел готовую крохотную утилиту flip. Плюсы: + Есть готовые версии почти под все платформы, кроме DOS, даже статически откомпилированный бинарник для Linux, так что можно задуть в роутер/initrd, если оно кому-то там надо. + Бесплатно + Есть исходники + Работает моментально + Поддерживает файлы с перепутанными концами строк (где есть и Windows, и UNIX и Mac варианты)
Минусов пока не нашел. Использование простое: первый параметр, что конкретно делаем, остальные - имена файлов через пробел. Делать можно следующее:
-t - отобразить используемый тип переноса строки
-d - конвертировать в DOS/Windows формат (CR+LF)
-m - конвертировать в Mac-формат (CR)
-u - конвертировать в UNIX/Linux формат (LF)
Скачать можно со странички автора или отсюда: 1. Исходник 2. Slackware-пакет 3. Версия для Windows (консольная) 4. Все остальное
Это репост заметки из моего блога на сайте http://tolik-punkoff.com Оригинал заметки находится здесь: http://tolik-punkoff.com/2017/01/09/universalnyj-konverter-simvolov-perevoda-stroki-windows-mac-linux/
1/11/17, 03:13 am
> На C# задача в строчки 4 кода решается, но тащить ради маленькой утилиты Mono, это уж слишком
Ад какой. На sed / awk / perl это в одну строчку.
1/11/17, 06:40 am
Напишите, как на sed (или на sed+awk), я себе весь мозг съел, пытаясь все три случая в одну кучу собрать и как-то универсализировать скрипт, а вот perl не желателен вообще, ибо может использоваться там, где того перла нема. Вообще про C# я, конечно, загнул :) И mono тащить не собирался. Идеально было бы чтоб либо средствами того, что есть в bisybox'е (а sed, awk и tr там вроде есть) либо отдельной утилитой. Найденная утилитка как раз и убила всех зайцев сразу, и статический бинарник есть, можно хоть в утюг встроить, да еще и в смешанных случаях работать может, когда разные концы строк в одном файле встречаются. Но за решение на sed+awk буду благодарен.
1/11/17, 07:46 am
Зачем писать один скрипт на три случая? Его всё равно придется вызывать с разными параметрами, проще поменять пару букв в однострочной команде с sed/awk.
Кроме того, есть программы dos2unix и unix2dos.
1/11/17, 08:26 am
Его всё равно придется вызывать с разными параметрами Да и ладно, зато универсально - один раз написал и пользуешься. Насчет sed, кстати, вообще не понял, что я не так делал, он почему-то не принимал у меня ни восьмеричные, ни шестнадцатеричные коды, ни последовательности \r \n \r\n. Да в принципе уже все, нашел же что устраивает, оставьте, не заморачивайтесь :)
Кроме того, есть программы dos2unix и unix2dos Знаю, тоже вариант, но не под мой случай.
1/11/17, 09:00 am
Первым делом это и сделал, и делал неоднократно. Прям до посинения. Какую-нибудь мелкую фигню пролюбил которую не знаю, или внимания не обратил, вот и не работает. Да и черт с ним, решено уже. А вот tr прекрасно все принимает CR на LF (и обратно) меняются одной строкой.
|