OS X в настоящее время поставляется с операционной системой FreeBSD 2005 года. Большинство различий ниже также применимы к другим версиям BSD sed.
OS X использует sed -Eдля ERE и GNU sed использует -r. -Eпсевдоним для -rв GNU sed (добавлено в 4.2, не документировано до 4.3). Более новые версии FreeBSD и NetBSD sed поддерживают -Eи -r. OpenBSD sed поддерживает только -E.
-i ''работает с OS X sed, но не GNU sed. -iработает с GNU sed, последними версиями NetBSD, OpenBSD sed, но не с OS X sed. -i -eработает с обоими, но в случае FreeBSD sedделает резервную копию исходного файла с -eдобавлением к имени файла (и вам нужно передать не более одного выражения sed).
GNU SED интерпретирует управляющие последовательности , как \t, \n, \001, \x01, \w, и \b. OS X и POSIX sed только интерпретируют \n(но не в замене s).
GNU sed интерпретирует \|, \+и \?в BRE, но OS X sed и POSIX sed не делают. \(, \), \{, И \}являются POSIX BRE.
GNU sed позволяет пропустить ;или новую строку раньше, }а OS X - нет.
i(вставка), a(добавление) и c(изменение) должны сопровождаться обратной косой чертой и новой строкой в OSD sed и POSIX sed, но не в GNU sed. GNU СЭД добавляет недостающий символ новой строки после текста , вставленный i, aили cно OS X в SED не делает. Например, sed 1iaGNU альтернатива sed $'1i\\\na\n'.
Например, printf a|sed -n pдобавляет новую строку в OS X sed, но не в GNU sed.
OS X sed не поддерживает I(без учета регистра) или M(многострочные) модификаторы. Более новые версии поддержки FreeBSD sed I.
OS X sed не поддерживает -s( --separate), -u( --unbuffered) или -z( --null-data).
Одна из опций BSD, которая не поддерживается GNU sed -a, заключается в wдобавлении файла вместо его усечения.
Примеры команд GNU sed, которые не работают с sed OS X:
sed /pattern/,+2d # like `sed '/pattern/{N;N;d;}'`
sed -n 0~3p # like `awk NR%3==0`
sed /pattern/Q # like `awk '/pattern/{exit}1'` or `sed -n '/pattern/,$!p'`
sed 's/\b./\u&/g' # \u converts the next character to uppercase
sed 's/^./\l&/' # \l converts the next character to lowercase
sed -i '1ecat file_to_prepend' file # e executes a shell command
sed -n l0 # 0 disables wrapping
sedСам GNU является совместимым, поскольку он делает вещи, разрешенные (но не обязательные, неуказанные) стандартом. Бывают случаи, когда он не соответствует требованиям, и его использованиеPOSIXLY_CORRECTв среде может помочь. Как и в случае сs/[\n]//gэтим необходимо удалить обратную реакцию иnсимволы, но вместо этого удалить символы новой строки. Или поведениеNкоманды в последней строке.