Что такое символ новой строки — '\n'

Это - очень простое понятие, но что-то я никогда не мог ясно сформулировать это хорошо. и я хотел бы попытаться записать его и видеть, где я иду не так, как надо.

Если бы я имею к, как я определил бы "символ новой строки". скажите, создаю ли я новый файл в Unix (или окна), затем делает хранилище файлов "конец строки" информация путем вставки специального символа в файл, названный как "символ новой строки". Если так, каково его значение ASCII? Я помню, что в программах C, проверил на символ чтения против значения '\n'. И почему это путающее 2 символа для представления конец символов строки..

bash$ cat states
California
Massachusetts
Arizona

Скажите, я хочу вставить один пробел строки между строками и хотеть вывод формы: Желаемый вывод:

California

Massachusetts

Arizona

bash$sed -e 's/\n/\n\n/g' states  does not work.

Почему я не могу рассматривать "символ новой строки" здесь так же, как я рассматривал бы какой-либо другой символ и выполнил бы что-то как вышеупомянутая команда. (Я понимаю, что можно было бы сказать, что это - вопрос синтаксиса sed, но мог тот объяснять интуицию позади не разрешения этого, так, чтобы я мог избавиться от своего беспорядка.

Точно так же в редакторе Vim, я не могу использовать: %s/\n/\n\n/g.Как же так?

Я должен далее выйти из \n при помощи обратной косой черты в sed и из энергии?.

Спасибо,

Jagrati

9
задан xyz 16 July 2010 в 17:13
поделиться

6 ответов

Из справочной страницы sed :

Обычно sed циклически копирует строку ввода, не включая завершающий символ новой строки, в пространство шаблонов (если после функция "D"), применяет все команды с адресами, которые выбирают это пространство шаблонов, копирует пространство шаблонов в стандартный вывод, добавляет новую строку и удаляет пространство шаблонов.

Он работает со строкой без символа новой строки, поэтому шаблон, который у вас там, не может совпадать. Вам нужно сделать что-то еще - например, сопоставить с $ (конец строки) или ^ (начало строки).

Вот пример того, что у меня сработало:

$ cat > states
California
Massachusetts
Arizona
$ sed -e 's/$/\
> /' states
California

Massachusetts

Arizona

Я ввел буквальный символ новой строки после \ в строке sed .

11
ответ дан 4 December 2019 в 07:04
поделиться

NewLine (\n) - 10 (0xA), а CarriageReturn (\r) - 13 (0xD).

Разные операционные системы выбрали разные представления конца строки для файлов. Windows использует CRLF (\r\n). Unix использует LF (\n). Старые версии Mac OS используют CR (\r), но OS X перешла на символ Unix.

Вот относительно полезный FAQ.

11
ответ дан 4 December 2019 в 07:04
поделиться
sed 's/$/\n/' states
3
ответ дан 4 December 2019 в 07:04
поделиться

Я думаю это сообщение Джефф Эттвуд прекрасно отвечает на ваш вопрос. Он проведет вас через различия между символами новой строки в Dos, Mac и Unix, а затем объяснит историю CR (возврат каретки) и LF (перевод строки).

1
ответ дан 4 December 2019 в 07:04
поделиться

Попробуйте следующее:

$ sed -e $'s/\n/\n\n/g' states
0
ответ дан 4 December 2019 в 07:04
поделиться

Escape-символы зависят от того, какая система их интерпретирует. \ n интерпретируется как символ новой строки во многих языках программирования, но это не обязательно верно для других упомянутых вами утилит. Даже если они обрабатывают \ n как новую строку, могут быть другие способы заставить их вести себя так, как вы хотите. Вам нужно будет ознакомиться с их документацией (или посмотреть другие ответы здесь).

Для систем DOS / Windows символ новой строки фактически состоит из двух символов: возврата каретки (ASCII 13, AKA \ r ), за которым следует перевод строки (ASCII 10). В системах Unix (включая Mac OSX) это просто перевод строки. На старых компьютерах Mac это был единственный возврат каретки.

5
ответ дан 4 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: