Использует ли команда sed команду «a» для префикса переносимой строки?

Я заметил следующее интересное поведение:

$ printf '%s\n' line{1..2} | sed $'1a\\\nPREFIX' line1 PREFIXline2 $ 

Интересно, что это поведение возможно только для последней команды в скрипте Sed, так как для ввода другой команды требуется новая строка.

Он также работает со вставкой:

 $ printf '%s\n' line{1..2} | sed $'1i\\\nPREFIX' PREFIXline1 line2 $ 

На что это зависит?

Я не вижу, чтобы это упоминалось так или иначе в спецификациях POSIX для Sed . Он просто говорит, что text может состоять из одной или нескольких строк. (Если строка не заканчивается символом новой строки, это все еще строка?)

Он также работает с несколькими вставками строк:

 $ printf '%s\n' line{1..2} | sed $'1a\\\n ****/\n1i\\\n/****\\\n * ' /**** * line1 ****/ line2 $ 

2 Solutions collect form web for “Использует ли команда sed команду «a» для префикса переносимой строки?”

Я просто проверил с другим Sed и обнаружил, что это особенность BSD Sed; GNU Sed дает разные результаты, наилучшим образом проиллюстрированные выходом последней приведенной выше команды:

 $ printf '%s\n' line{1..2} | sed $'1a\\\n ****/\n1i\\\n/****\\\n * ' /**** * line1 ****/ line2 $ 

Чтобы префикс строки со строкой, используйте подстановку (замены) и замените ^ :

 $ printf 'line1\nline2\n' | sed '1s/^/PREFIX/' PREFIXline1 line2 

Используйте a чтобы добавить строки после некоторой строки, и i чтобы вставить строку перед другой строкой.

«На что это зависит?» Нет. Как отмечает Стефан Чазелас в комментариях: «Это явно ошибка», а GNU sed не показывает описанное поведение.

  • Есть ли утверждения о нулевой ширине в sed?
  • sed - шаблон только на некоторых предопределенных строках
  • Как печатать одинаковые строки несколько раз с переменными, измененными с помощью Sed / Awk / anything?
  • Разбор таблицы текстовых файлов и агрегирование информации
  • regex заменить текст в XML-файле в узле из командной строки
  • Сохранять только столбец .csv, содержащий данные XYZ?
  • Как заменить одну строку двумя строками с помощью sed в csh на BSD?
  • sed, получив ошибку: sed: unterminated {
  • частота появления
  • Изменение формата валюты на общий номер с помощью sed
  • использование команды sed для замены имен пробелами
  • Linux и Unix - лучшая ОС в мире.