В синтаксисе s/foo/bar
\r
и \n
имеют разные значения в зависимости от контекста.
короткий:
Для foo
:
\ n = новая строка (LF в Linux / Mac, CRLF в Windows)
\ r = возврат каретки (CR)
Для bar
:
\ r = перевод строки
\ n = нулевой байт.
длиннее: (с номерами ascii)
NUL
= 0x00 = 0 = CTRL @
LF
= 0x0A = 10 = CTRL J
CR
= 0x0D = 13 = CTRL M
Вот список управляющих символов ASCII , вставьте их в vim
через CTRL v CTRL --- ключ --- .
В bash
или других оболочках Unix / Linux просто наберите CTRL --- ключ --- . Попробуйте CTRL M в bash, это то же самое, что нажать ENTER , поскольку оболочка понимает, что имеется в виду, даже если в системах Linux используется Line Feeds для разграничения строк.
Для вставки литералов в bash, предварение их с помощью CTRL v также будет работать.
Попробуйте в bash:
echo ^[[33;1mcolored.^[[0mnot colored.
Используется escape-последовательности ANSI , вставьте два ^[
через CTRL v ESC .
Вы также можете попробовать CTRL v CTRL m ENTER , который даст вам следующее:
bash: $'\r': command not found
Помните \r
сверху? :>
Этот Список управляющих символов ASCII отличается от полной таблицы символов ASCII тем, что управляющие символы, которые вставляются в консоль / псевдотерминал / vim через Клавиша CTRL (ха-ха), можно найти там.
В то время как в C и большинстве других языков вы обычно используете восьмеричные коды для представления этих «символов».
Если вы действительно хотите знать, откуда все это происходит: http://www.linusakesson.net/programming/tty/.
Это лучшая ссылка на эту тему, с которой вы столкнетесь, но будьте осторожны: там будут драконы.
TL; DR
Обычно foo
= \n
и bar
= \r
.