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

  • как использовать awk для вычитания с числами в большом файле
  • Как удалить строки в файле с определенной позиции до конца файла
  • Мне нужно получить номер строки, который имеет наибольшее значение
  • Сбросьте шаблон слова в конце строки, используя sed
  • Найдите шаблон, используя grep, а затем замените sed
  • Добавить строку в список, используя AWK или SED?
  • sed: вставьте sth перед последующими строками, которые начинаются одинаково, но не совпадают
  • Заменить значение в таблице
  • Как использовать переменные в команде sed
  • sed - найти строку и добавить
  • Найти больше дубликатов
  • Необходимо взять четвертое слово строки и скопировать его в начало строки (sed awk)
  • Interesting Posts

    сортировать файл на месте при записи на него

    grep -Ef для захвата соответствующих ip-адресов в двух файлах, а также результат печати или эха каждой итерации, xx.xx.xx.xx found или xx.xx.xx.xx не найден

    Как установить Kubernetes на Linux SUSE?

    Вызов cp из BASH и использование опции -u

    Невозможно выполнить скрипт bash (неожиданный элемент '(')

    Лучший способ сделать зашифрованные резервные копии при сохранении разрешений на файловую систему Windows

    Что такое файл ключа kerberos keytab, используемый для аутентификации Kerberos в UNIX / AD?

    Что значит запускать процесс в фоновом режиме?

    Возможно ли p2v автономная Linux-система для рабочей станции VMware?

    Как вернуть апплет объема GNOME?

    Xvfb не отправляет SIGUSR1, прерывая xvfb-run

    Построить матрицу на основе значений другой матрицы

    Поиск файла журнала демона ntp в Ubuntu 10.04 LTS

    Как открыть диалоговое окно файла в экранном шкафчике (Antergos / KDE)

    Нет java-команды после sudo apt-get install default-jdk

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