Перенос строки windows linux

Содержание
  1. как добавить перенос строки
  2. Re: как добавить перенос строки
  3. Re: как добавить перенос строки
  4. Re: как добавить перенос строки
  5. Re: как добавить перенос строки
  6. Re: как добавить перенос строки
  7. Re: как добавить перенос строки
  8. Re: как добавить перенос строки
  9. Re: как добавить перенос строки
  10. Re: как добавить перенос строки
  11. Re: как добавить перенос строки
  12. Re: как добавить перенос строки
  13. Re: как добавить перенос строки
  14. Re: как добавить перенос строки
  15. Re: как добавить перенос строки
  16. Перенос строки windows linux
  17. одинаковый символ перевода строки для Windows и Linux
  18. Почему важно всегда ставить символ переноса строки в конце текстовых файлов?
  19. Что такое символ переноса строки?
  20. Почему перенос строки в конце файла важен?
  21. Ещё доводы:
  22. Настраиваем редактор
  23. Заключение
  24. Новая строка
  25. Новая строка
  26. Содержание
  27. Общие сведения
  28. Терминология
  29. Представления и реализации
  30. Краткие сведения
  31. Основные цифровые реализации
  32. Перевод строки в Unicode
  33. Трудности
  34. История
  35. Примечания
  36. Дополнительные источники
  37. Смотреть что такое «Новая строка» в других словарях:

как добавить перенос строки

Подскажите, как в bash в конец текствого файла добавить перенос на новую строку?

Re: как добавить перенос строки

Ты уже утомил дурными вопросами. Это просто неуважение к форуму.

Re: как добавить перенос строки

Солидарен с sdio. Попробуй хотя бы книжку какую-нибудь почитать.

Re: как добавить перенос строки

Вот нада все подобные вопросы закинуть в FAQ, и потом кричать: В FAQ с****ы дети (с)LOR

Re: как добавить перенос строки

Закидывай, к lor-wiki у тебя доступ есть.

Re: как добавить перенос строки

😀
В голову пришло:
for i in `cat 1`; do echo «$i» >> 2; done; echo «» >> 2; mv 2 1

Re: как добавить перенос строки

ну ессно 1 это у нас файл в котором нужно добавить пуструю строку в конец

Re: как добавить перенос строки

что-то у тебя как-то сложно или я задачу не правильно понял мне по описанию задачи в голову пришло только echo -e «\n» >> file

Re: как добавить перенос строки

=)
Да че первое в голову пришло то и написал

Re: как добавить перенос строки

Re: как добавить перенос строки

-en, а то два переноса добавишь

Re: как добавить перенос строки

угу, верно, признаю косяк

Re: как добавить перенос строки

Re: как добавить перенос строки

Ищешь код перевода строки в /dev/random и добавляешь его в файл.

Re: как добавить перенос строки

Тоже хорошо. Созерцать на берегу реки, как мимо проплывают разные символичные, но непостижимые фигуры и когда-нибудь мимо убеленного благородными сединами старца прошествует Истинный Знак. То будет Знак перевода строки. Он увидит его не подымая век. К тому времени он уже сможет мимолетным движением брови вставлять любые знаки в между небесными кварками. Но не сделает этого ибо не захочет входить вновь в кармический круговорот.

Перенос строки windows linux

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

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

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

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

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

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

одинаковый символ перевода строки для Windows и Linux

Если написать на С++

то в Windows в файл будет записано CR+LF, а в Linux будет записано LF.
Как задать в тексте программы, чтоб \n в строках интерпретировался при выводе в файл одинаково (либо CR+LF, либо LF по выбору) ?

А то получается что файлы в Windows и Linux побайтно не совпадают.

Неа. В Винде опять получишь CR+LF+CR

Попробуй юзать fstream, там, возможно этого не будет.

futures
> Если написать на С++
> fprintf(fp, «\n»);
Это не на С++, это на Си.
А на С++

std::endl не поможет случаем?

Какой-то ужас.
Достаточно просто указать в fopen режим «wb».

Ответ уже дали:
flatz> Достаточно просто указать в fopen режим «wb».

>> std::ofstream fp;
>> fp.open(«file.txt»);
>> fp
>> fp.close();
я понимаю, что можно просто вместо \n прописать свою константу и ее уже выводить как один или два символа, но в таком случае:
1) теряется наглядность, если в строке много чего выводится, то намного удобнее чтоб там был просто вывод \n
2) уже есть куча написанного кода просто с \n, теперь придется вручную его изменять.

>> Достаточно просто указать в fopen режим «wb».
ну про бинарный режим открытия файла я понимаю, но тогда в Windows вместо \n будет записан только LF, и большинство виндовс-программ не будут его нормально открывать, что очень неудобно (ну или нужно лазить по всей программе и заменять всюду \n на \r\n).
Вообще то я склоняюсь к тому, чтоб и в Виндовс и в Линукс мне будет удобнее заменять \n на CR+LF, только вот как автоматизировать этот процесс, чтоб не менять все в тексте программы, а раз задать константу?

Читайте также:  Отличие линукса от виндовс

А может можно как-то переопределить std::endl на то, что мне нужно(либо CR+LF, либо LF по выбору )?

futures
> но тогда в Windows вместо \n будет записан только LF, и большинство
> виндовс-программ не будут его нормально открывать
Ну а \n\r туда записать конечно же по каким-то причинам уже нельзя.

futures
Ты все-таки определись, что именно тебе нужно — бинарная совместимость файлов или то, чтобы в каждой из ОС соблюдался именно ее стандарт на завершение строки.
Одновременно выполнить эти два условия совершенно невозможно.

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

futures
>>мне однозначно нужна бинарная совместимость файла

Зачем нужна бинарная совместимость, если файл будет редактироваться ручками ?

futures
> Как задать в тексте программы, чтоб \n в строках интерпретировался при выводе в
> файл одинаково
Поставить флаг, что файл бинарный «fopen(«. «, «wb»)». Это выключит любую самодеятельность.

> большинство виндовс-программ не будут его нормально открывать
Кроме блокнота таких не замечено.

> только вот как автоматизировать этот процесс, чтоб не менять все в тексте
> программы, а раз задать константу?
Заменить \n на «NEW_LINE»(с кавычками) и соответственно объявить макрос.

Почему важно всегда ставить символ переноса строки в конце текстовых файлов?

Иногда при просмотре диффов коммитов через git log или git diff можно заметить следующий вывод:

Или на GitHub в интерфейсе для просмотра диффов:

Почему это так важно, что Git и GitHub предупреждают нас об этом? Давайте разберемся.

Что такое символ переноса строки?

Что может быть проще, чем текстовый файл? Просто текстовые данные — как хранятся на диске, так и отображаются. На самом деле правительство нам врёт всё немного сложнее.

Оффтопик про управляющие символы ASCII

Не все символы, которые содержатся в текстовых файлах, имеют визуальное представление. Такие символы ещё называют «управляющими», и к ним относятся, например:

  • нулевой символ ( x00 , \0 ) — часто используется для кодирования конца строки в памяти; т.е. программа считывает символы из памяти по одному до тех пор, пока не встретит нулевой символ, и тогда строка считается завершённой;
  • табуляция ( \x09 , \t ) — используется для выравнивания данных по границе столбца, так что это выглядит как таблица;
  • перевод строки ( \x0a , \n ) — используется для разделения текстовых данных на отдельные строки;
  • возврат каретки ( \x0d , \r ) — переместить курсор в начало строки;
  • возврат на один символ ( \x08 , \b ) — переместить курсор на один символ назад;
  • звонок ( \x07 , \a ) — если набрать этот символ в терминале, то будет бибикающий символ; именно так консольные программы, типа vim , бибикают на пользователей;
  • и другие.

Многие эти символы пришли к нам из эпохи печатных машинок, поэтому у них такие странные названия. И действительно, в контексте печатной машинки или принтера такие операции, как перевод строки (сместить лист бумаги вверх так, чтобы печатающая головка попала на следующую строку), возврат каретки (переместить печатающую головку в крайнее левое положение) и возврат на один символ назад, обретают смысл. При помощи возврата на один символ назад создавались жирные символы (печатаешь символ, возвращаешься назад и печатаешь его ещё раз) и буквы с диакритическими знаками, такие как à или ã (печатаешь символ, возвращаешься назад и печатаешь апостроф или тильду). Но зачем печатной машинке бибикалка?

Сегодня многие из этих символов потеряли смысл, но некоторые до сих пор выполняют функцию, схожую с исходной.

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

Для набора символа переноса строки достаточно нажать клавишу «Enter», но на разных платформах этот символ закодируется по-разному:

  • в Unix-совместимых системах (включая современные версии macOS) используется один символ перевода строки ( LF );
  • в Windows используется сразу два символа — возврат каретки ( CR ) и перевод строки ( LF );
  • в очень старых версиях Mac OS (до 2001 года) использовался один символ CR .

Как видите, Windows точнее всего эмулирует поведение печатной машинки.

В языках программирования символ новой строки часто кодируют при помощи бэкслэш-последовательностей, таких как \n или \r\n . Нужно понимать разницу между такой последовательностью и настоящим символом переноса строки. Если в редакторе в файле *.txt просто набрать \n и сохранить, то вы получите ровно то, что написали. Символом переноса строки оно не станет. Нужно что-то, что заменит эти бэкслэш-последовательности на настоящие символы переноса строки (например, компилятор или интерпретатор языка программирования).

Почему перенос строки в конце файла важен?

Согласно определению из стандарта POSIX, который тоже пришёл к нам из эпохи печатных машинок:

Строка — это последовательность из нуля или более символов, не являющихся символом новой строки, и терминирующего символа новой строки.

Почему важен этот стандарт? Возможен миллиард способов реализовать одно и то же, и только благодаря стандартам, таким как POSIX, мы имеем сейчас огромное количество качественного ПО, которое не конфликтует друг с другом.

Т.е. если вы не ставите символ переноса строки в конце строки, то формально по стандарту такая строка не является валидной. Множество утилит из Unix, которыми я пользуюсь каждый день, написано в согласии с этим стандартом, и они просто не могут правильно обрабатывать такие «сломанные» строки.

Читайте также:  Что значит изолированный пакет центра обновления windows

Давайте, например, через Python создадим такой файл со сломанными строками:

Сколько по-вашему в этом файле строк? Три? Давайте посмотрим, что об этом файле думает утилита wc , которая с флагом -l умеет считать количество строк в файле:

Упс! wc нашла только 2 строки!

Давайте создадим еще один файл:

И попробуем теперь склеить два созданных файла при помощи утилиты cat :

Название cat — это сокращение от «конкатенация», и никак не связано с котиками. А жаль.

И опять какой-то странный результат! В большинстве случаев это не то, чего вы бы ожидали, но вполне возможны ситуации, когда вам нужен именно такой результат. Именно поэтому утилита cat не может самостоятельно вставлять отсутствующие символы переноса строки, иначе это сделало бы её поведение неконсистентным.

Это только пара примеров, но многие другие утилиты, которые работают с текстом (например, diff , grep , sed ), имеют такие же проблемы. Собственно говоря, это даже не проблемы, а их задокументированное поведение.

Ещё доводы:

  • при дозаписи содержимого в конец файла без переноса строки получится некрасивый дифф — будет изменена последняя строка (хотя на ней всего лишь добавился символ переноса);
  • файл с переносом строки и без переноса строки — это два разных файла; для diff и git diff единственный способ отобразить разницу между ними — это напечатать сообщение об отсутствии символа переноса строки;
  • согласно стандарту языка C (до 2014 года), непустые файлы с исходным кодом должны заканчиваться символом переноса строки.

Настраиваем редактор

Самый простой способ перестать думать о пустых строках и начать жить — это настроить свой текстовый редактор или IDE на автоматическое добавление символа переноса строки в конец файлов:

  • PyCharm и другие IDE JetBrains: Settings > Editor > General > Ensure an empty line at the end of a file on Save ;
  • VS Code: «files.insertFinalNewline»: true .

Для других редакторов смотрите настройку здесь.

Кстати, если вы пользуетесь форматтером black , то у меня хорошие новости — он всегда добавляет перенос строки в конец всех файлов *.py .

Заключение

Возможно, такая маленькая деталь, как перенос строки в конце файла и не кажется очень важной, а тема вообще кажется спорной, но боюсь, что у нас нет другого выбора, кроме как принять это правило за данность и просто выработать привычку (или настроить инструментарий) всегда ставить символ новой строки в любых текстовых файлах, даже если этого не требуется явно. Это считается распространённой хорошей практикой, и как минимум убережёт вас и ваших коллег от всяких неожиданных эффектов при работе с утилитами Unix.

В текстовом редакторе это выглядит как лишняя пустая строка в конце файла:

Новая строка

Новая строка

Новая строка или перевод строки или перенос строки или разделитель строк или символ конца строки (EOL) в информатике — специальный управляющий символ (или их последовательность), служащий для завершения или разделения строк в текстовых данных.

Содержание

Общие сведения

Название закрепилось из-за того, что следующий символ после разделителя печатается уже на новой строке, то есть на следующей строке, расположенной ниже текущего текста, сразу следующей за разделителем. В виде символов представляют «новую строку» по-разному, в зависимости от аппаратной платформы и операционной системы, что может стать потенциально проблемой при обмене данными между системами с различными представлениями форматирования текста.

Следует различать ситуации, когда «новая строка» завершает строки, а когда — разделяет их. Если «новая строка» подразумевает отделение строк, то знак «новой строки» не ставится после последней строки файла. По общему соглашению, в большинстве систем «новая строка» добавляется даже после последней строки, то есть трактуют «новую строку» как окончание строки. Некоторые программы имеют трудности с обработкой последней строки файла, если он не заканчивается символом новой строки. И наоборот, программы, ожидающие «новую строку» чтобы использовать ее как разделитель, интерпретируют последнюю «новую строку» как начало новой (пустой) строки. Это может привести к различиям в подсчете строк в файле, но во всем остальном это, в общем-то, безвредно.

В текстах, предназначенных для чтения людьми при помощи программ, использующих переносы слов, символ «новой строки» обычно необходим, только если перенос строки должен быть независим от положения следующего слова на этой же строке, как, например, между параграфами и вертикальными списками (см. жёсткий возврат и мягкий возврат)

Терминология

Но́вая строка́ (калька с англ. new line , зд. «с новой строки») — понятие логического форматирования текста в текстовом процессоре, браузере и т.д. Как правило (хотя и не обязательно), новая строка начинает запись текста с нового абзаца (англ. hard return ). Новая строка подразумевает обязательный перевод строки в соответственном месте текста, хотя «переводы строки» вообще имеются и внутри абзаца.

Возвра́т каре́тки (англ. Carriage Return, CR ) — управляющий символ ASCII 0x0D, при выводе которого курсор перемещается к левому краю поля, не меняя высоту. Этот управляющий символ вводится клавишей «Enter». Будучи записан в файле, в отдельности рассматривается как перевод строки только в системах Macintosh.

Пода́ча строки́ (от англ. Line Feed, LF «подача [бумаги] на строку») — управляющий символ ASCII 0x0A, при выводе которого «курсор» перемещается на следующую строку.

В случае принтера это означает сдвиг бумаги вверх, в случае дисплея — сдвиг курсора вниз если ещё осталось место, и прокрутку текста вверх если курсор находится на нижней строке.

Возвращается ли при этом курсор к левому краю или нет, зависит от реализации.

Таким образом, вывод последовательности CR LF в семантике терминала гарантирует действие «создание новой строки».

Терминалы (и их эмуляторы) могут также проводить различные преобразования символов (например, «LF» → «CR LF», «CR» → «CR LF») при вводе и выводе текста.

Читайте также:  Kmsauto lite не активирует windows 10 pro

Представления и реализации

Программные приложения и операционые системы обычно представляют «новую строку» в виде одного или двух управляющих символов.

Краткие сведения

Системы, основанные на ASCII или совместимом наборе символов, используют или LF (от англ. Line feed (перевод строки), 0x0A) или CR (от англ. Carriage Return, 0x0D) по отдельности, или CR следует за LF (CR+LF, 0x0D 0x0A); см. ниже историческую причину для соглашения CR+LF. Эти символы основаны на командах принтера: перевод строки означает, что одна строка на бумаге должна быть перенесена при печати, а возврат каретки означает, что каретка печатающего устройства должна вернуться к началу текущей строки.

Основные цифровые реализации

  • LF (ASCII 0x0A) — используется в Multics, Unix и Unix-подобных операционнах системах (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD и др.), BeOS, Amiga, RISC OS и других
  • CR (ASCII 0x0D) — используется в машинах Commodore, Apple II, Mac OS до версии 9 и OS-9
  • CR + LF (ASCII 0x0D 0x0A) — используется в DECRT-11 и большинстве остальных доюниксовых систем, несовместимых с IBM OS, а также в CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS, протоколах internet.

Перевод строки в Unicode

По стандарту, любое совместимое с Юникодом приложение должно воспринимать как перевод строки каждый из нижеследующих символов:

  • LF: подача строки, U+000A
  • CR: возврат каретки, U+000D
  • NEL: новая строка, U+0085
  • FF: новая страница, U+000C
  • LS: разделитель строк, U+2028
  • PS: разделитель абзацев, U+2029

Последовательность CR LF (U+000D U+000A) надлежит воспринимать как один перевод строки (а не два) [1] .

Трудности

  • Нет общепринятых сокращений русских терминов. ВК (Возврат Каретки) опасно совпадает по написанию с сокращением от англ.BreaK («разрыв [строки]», то же, что Перевод строки), а ПС не различает Подачу Строки и Перевод Строки.
  • Юникод старается примирить разницу представлений перевода строки, уравнивая CR, LF и CR LF, однако вступает в противоречие с наследуемым ASCII при трактовке LF CR, не предварённых CR: согласно ASCII это один перевод строки, а согласно Юникоду — два. Вероятно, Юникод сделал ставку на не существовавшие в ASCII разделители строк и абзацев, но они не прижились.
  • В зависимости от того, считать ли перевод строки её частью (завершителем) или не считать (считая их разделителем), после последней строки его ставят или нет. При пренебрежении одной из этих возможностей во время декодирования конец текста может стать неожиданным или появится лишняя пустая строка. Для сравнения, точка с запятой в Си команды завершает, а в Паскале разделяет.

История

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

На АЦПУ функции возврата каретки (головки) и подачи новой строки были разделены, откуда традиция представления перевода строки как CR LF перешла и к текстовым файлам.

Некоторые исторические цифровые системы записи текста (например, при помощи перфокарт) вообще не использовали символ перевода строки.

Примечания

Дополнительные источники

  • The Unicode reference, see paragraph 5.8 in Chapter 5 of the Unicode 4.0 standard (PDF)
  • «The End-of-Line Story»
  • The [NEL] Newline Character
  • The End of Line Puzzle
  • Tofrodos — software for Unix that converts to and from DOS newlines
  • ToFroWin: a Windows shell extension that is able to convert multiple files from DOS to UN*X (and vice-versa) line endings right from the context menu.

Wikimedia Foundation . 2010 .

Смотреть что такое «Новая строка» в других словарях:

Новая судейская система (фигурное катание) — Новая судейская система (англ. New Judging System (NJS), также Судейская система ИСУ, англ. ISU Judging System[1]) действующая система оценок для мужского и женского одиночного фигурного катания, парного катания, спортивных танцев … Википедия

Новая волна 2011 — Дата проведения 26 июля 31 июля … Википедия

Красная строка — вся прописная, заголовок, или новая строка … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

New line — Новая строка … Краткий толковый словарь по полиграфии

Перенос строки — Новая строка или перевод строки или перенос строки или разделитель строк или символ конца строки (EOL) в информатике специальный управляющий символ (или их последовательность), служащий для завершения или разделения строк в текстовых данных.… … Википедия

Подача строки — Новая строка или перевод строки или перенос строки или разделитель строк или символ конца строки (EOL) в информатике специальный управляющий символ (или их последовательность), служащий для завершения или разделения строк в текстовых данных.… … Википедия

Разделитель строк — Новая строка или перевод строки или перенос строки или разделитель строк или символ конца строки (EOL) в информатике специальный управляющий символ (или их последовательность), служащий для завершения или разделения строк в текстовых данных.… … Википедия

АБЗАЦ — (нем. Absatz от ab от и setzen класть, ставить.). Начало текста, новая строка при типографском наборе букв. Словарь иностранных слов, вошедших в состав русского языка. Чудинов А.Н., 1910. АБЗАЦ нем. Absatz, от ab, от, и setzen, класть, ставить.… … Словарь иностранных слов русского языка

TELNET — Название: Teletype network Уровень (по модели OSI): Прикладной Семейство: TCP/IP Порт/ID: 23/TCP Назначение протокола: виртуальный текстовый терминал Спецификация: RFC 854 / STD 8 … Википедия

Date — утилита Unix для работы с системными часами. Выводит текущую дату и время в различных форматах и позволяет устанавливать системное время. Содержание 1 Использование 2 Ключи 3 См. также … Википедия

Оцените статью