В соответствии с фантастическими комментариями mklement0 спецификации POSIX говорит нам, что:
С опциональными-аргументами, POSIX подсобных конвенции требуют, чтобы (курсив его) «конформная заявка помещайте ВАРИАНТ-аргумент в пользу этот вариант непосредственно рядом с параметром в той же строке аргумента, без промежуточных символов.
Поскольку GNU SED считает суффикс аргумент -i
быть необязательно это требует, чтобы быть обнимались против аргумент параметра, поэтому, когда вы пишете -ie
, GNU sed интерпретирует это как запрос суффикса e
для аргумента -i
. (BSD sed интерпретирует его таким же образом по причинам, которые объясняются в дополнительной информации внизу.)
Все это означает, что вам нужно использовать -i -e
, чтобы получить нужное поведение (для GNU sed) вместо этого (для BSD sed вам понадобится -i '' -e
).
Дополнительные подробности о неудачном, но интересной различия между GNU СЭД и BSD СЭД:
GNU СЭД и BSD СЭД (OSX СЭД) согласны ли значение суффикс -i
аргумент является необязательным или обязательным.
Это важно, потому что в дополнение к требованиям POSIX выше, мы находим следующее в спецификации, а также (внимание mkelement0 снова):
вариант с обязательной опцией-аргумента [...], соответствующего требованиям приложения должны использовать отдельные аргументы для этого параметра и его аргумент option. Однако соответствующая реализация также позволяет приложениям указывать опцию и параметр-аргумент в одной строке аргумента без промежуточных символов.
ГНУ СЭД считает суффикс быть необязательным (и это вызывает поведение выше), потому что он принимает обнималась e
для дополнительного аргумента, но игнорирует отделенный -e
(или что-либо еще) в качестве отдельного аргумента.
BSD sed считает, что суффикс обязателен (хотя он может быть пустым), это означает, что опция должна быть отделена от флага пробелом (например, -i .bak
или -i ''
), хотя, как отмечает «Однако», BSD sed также позволяет использовать любой непустой суффикс против флага -i
.
Это несогласие, так как mklement0 указывает на то, что время от времени появляется на SO, означает, что вы не можете использовать пустой суффикс редактирования на месте способом, который переносится как для версий sed, так и для GNU и BSD.
Примечание для будущих читателей: вопрос отмечен 'osx', который изначально поставляется с _BSD_' sed', но вопрос явно о _GNU_ 'sed', так что это поведение последнего имеет значение, а платформа случайна. – mklement0