Использует ли команда 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 $ 

  • Передача разобранного вывода sed для поиска (в этом направлении)
  • удаление расширений в столбце
  • Добавить что-то в каждый список в файле
  • UNIX - команда разбивать файл на несколько файлов со всеми строками для каждых 3 уникальных значений в столбце
  • Вопрос о замене символа в текстовом файле
  • Запись файлов grep за последние 30 минут
  • как изменить замену слова в конкретной строке с помощью команды sed?
  • вырезать столбец int array в CSV без обрезки другого массива varchar
  • 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 не показывает описанное поведение.

    Linux и Unix - лучшая ОС в мире.