echo n | sed '\n\nnd'
При использовании GNU sed приведенная выше команда печатает n
. Напротив, BSD sed ничего не печатает.
POSIX sed spe c говорит:
В контексте адреса, конструкция \cBREc
, где c
- любой символ, отличный от или , должна быть идентична /BRE/
. Если символ, обозначенный c
, появляется после , то он считается тем буквальным символом, который не должен заканчиваться BRE. Например, в контекстном адресе \xabc\xdefx
второй x
обозначает себя, так что BRE равен abcxdef
.
escape-последовательность \n
должна соответствовать встроено в пространство шаблона. Литерал не должен использоваться в BRE контекстного адреса или в функции замены.
Но он не раскрывает противоречие, вызванное этими утверждениями.
Мой вопрос: какой из них является правильным поведением? напечатать n
или ничего? Или, выбор преднамеренно оставлен разработчикам?
Очевидно, что GNU sed трактует \n
иначе, чем другие escape-последовательности:
$ echo t | sed 'st\ttt' | xxd
00000000: 0a .
$
$ echo n | sed 'sn\nnn' | xxd
00000000: 6e0a n.