Это расширение OSX sed
, а не стандартное поведение. Вы можете увидеть эту ссылку в функции compile_text
:
/*
* Compile the text following an a or i command.
*/
static char *
compile_text()
{
int asize, size;
char *text, *p, *op, *s;
char lbuf[_POSIX2_LINE_MAX + 1];
asize = 2 * _POSIX2_LINE_MAX + 1;
text = xmalloc(asize);
size = 0;
while (cu_fgets(lbuf, sizeof(lbuf))) {
op = s = text + size;
p = lbuf;
EATSPACE();
for (; *p; p++) {
if (*p == '\\')
p++;
*s++ = *p;
}
size
Они использовали пробелы с помощью макроса EATSPACE
.
В FreeBSD sed
, который может неправильно обрабатывать \
как символы продолжения строки при использовании a
, i
, c
, поведение более странное. В моей FreeBSD 9.3:
$ echo 1 | sed -e 'i\ 1'
": extra characters after \ at the end of i command
но:
$ echo 1 | sed -e 'i\
2'
2
1
работает, и к тому же ест пробелы.
GNU sed
, семейная реликвия sed
не имеет этой проблемы.