bash и ^M (перевод строки в Linux).

Ещё одна тривиальная задача, но, как выяснилось, не всем известно её решение. Итак, сегодня мы поговорим о переводе строки в Linux. Есть *nix, на который мы wget-ом, например, вытащили текстовик (конфигурационный файл, скрипт…), созданный на компьютере под управлением Windows. Дело в том, что в Windows системах перенос строки обозначается двумя символами — CR и LF, а в Linux-е только CR (возврат каретки).Соответственно, файл в терминале будет выглядеть примерно так:

ctrl-m

Вот эти ^M в конце каждой строки — это и есть лишний символ, доставшийся нам от Windows. В случае с CSS — ничего страшного не случится, но если это стартовый скрипт, например, из статьи про SSHGuard — работать он не будет. Для того, чтобы исправить ситуацию существует множество решений, конечно, но с моей точки зрения есть два наиболее изящных. Первое решение подойдёт тем, у кого на Linux-машине установлен интерпретатор Perl. Вот он:

[cc lang=»perl»]

perl -pi -e ‘s/\r\n/\n/;’ filename

[/cc]

Второй же вариант реализуется исключительно средствами командной оболочки bash:

[cc lang=»bash»]

cat filename.in | col -b > filename.out

[/cc]

Оба варианта работоспособны полностью, но я предпочитаю второй, так как он оставляет нетронутым оригинальный файл на случай, если что-то пойдёт не так.

Помогла заметка - поделись с другом:
    • mikhail
    • Январь 23rd, 2016

    Ок, спасибо за подсказку col -b пришлось кстати

  1. Октябрь 28th, 2014

Оставьте эти два поля как есть:

 
Яндекс.Метрика