Atualmente, o OS X vem com um sed do FreeBSD a partir de 2005. A maioria das diferenças abaixo também se aplica a outras versões do sed do BSD.
Os usos sed do OS X -Epara usos sed ERE e GNU -r. -Eé um alias para -rno GNU sed (adicionado em 4.2, não documentado até 4.3). Versões mais recentes do FreeBSD e NetBSD sed suportam tanto -Ee -r. O OpenBSD sed suporta apenas -E.
-i ''funciona com o sed do OS X, mas não o GNU sed. -itrabalha com GNU sed, versões recentes do NetBSD, OpenBSD sed, mas não do OS X sed. -i -efunciona com ambos, mas no caso do FreeBSD sedfaz um backup do arquivo original -eanexado ao nome do arquivo (e você não precisa passar mais que uma expressão sed).
GNU interpreta sed sequências de escape como \t, \n, \001, \x01, \w, e \b. O sed do OS X e o POSIX sed interpretam apenas \n(mas não na parte de substituição s).
O GNU sed interpreta \|, \+e \?no BRE, mas o sed do OS X e o POSIX sed não. \(, \), \{, E \}são POSIX BRE.
O GNU sed permite omitir ;ou uma nova linha antes, }mas o sed do OS X não.
i(insert), a(append) e c(change) devem ser seguidos por uma barra invertida e uma nova linha no sed do OS X e no POSIX sed, mas não no GNU sed. Sed GNU acrescenta uma nova linha faltando após o texto inserido por i, aou cmas OS X da sed não. Por exemplo, sed 1iaé uma alternativa ao GNU sed $'1i\\\na\n'.
Por exemplo, printf a|sed -n padiciona uma nova linha no sed do OS X, mas não no GNU sed.
O sed do OS X não suporta modificadores I( que não diferenciam maiúsculas de minúsculas) ou M(multilinhas). Versões mais recentes do suporte ao FreeBSD sed I.
O sed do OS X não suporta -s( --separate), -u( --unbuffered) ou -z( --null-data).
Uma opção BSD que não é suportada pelo GNU sed é a -aque wanexa a um arquivo em vez de truncar um arquivo.
Exemplos de comandos GNU sed que não funcionam com o sed do 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
sedpróprio GNU é compatível, pois faz as coisas permitidas (mas não exigidas, não especificadas) pelo padrão. Há casos em que não é compatível e onde a execuçãoPOSIXLY_CORRECTno ambiente pode ajudar. Como coms/[\n]//gisso, é necessário remover a folga e osncaracteres, mas remover as novas linhas. Ou o comportamento doNcomando na última linha.