OS X wird derzeit mit einer FreeBSD-Version ab 2005 ausgeliefert. Die meisten der folgenden Unterschiede gelten auch für andere BSD-Versionen.
Die sed-Verwendungen von OS X -Efür ERE- und GNU-sed-Verwendungen -r. -Eist ein Alias für -rin GNU sed (hinzugefügt in 4.2, nicht dokumentiert bis 4.3). Neuere Versionen von FreeBSD und NetBSD sed unterstützen sowohl -Eals auch -r. OpenBSD sed unterstützt nur -E.
-i ''funktioniert mit OS X's sed aber nicht mit GNU sed. -ifunktioniert mit GNU sed, neueren Versionen von NetBSD, OpenBSD sed, aber nicht mit OS X sed. -i -efunktioniert mit beiden, aber im Falle von FreeBSD sedwird eine Sicherungskopie der Originaldatei mit dem -eangehängten Dateinamen erstellt (und Sie müssen nicht mehr als einen Ausdruck übergeben sed).
GNU sed interpretiert Escape - Sequenzen wie \t, \n, \001, \x01, \w, und \b. OS X's sed und POSIX sed interpretieren nur \n(aber nicht im Ersatzteil von s).
GNU sed interpretiert \|, \+und \?in BRE aber OS X sed und POSIX sed nicht. \(, \), \{, Und \}sind POSIX BRE.
GNU sed erlaubt das Auslassen von ;Zeilen oder eine neue Zeile }, OS X's sed nicht.
i(insert), a(append) und c(change) müssen in sed und POSIX sed von einem Backslash und einer Newline gefolgt werden, nicht jedoch in GNU sed. GNU sed eine fehlende Newline nach dem von eingefügten Text fügt hinzu i, aoder caber OS X sed ist nicht der Fall. Zum Beispiel sed 1iaist eine GNU-Alternative zu sed $'1i\\\na\n'.
printf a|sed -n pFügt beispielsweise eine neue Zeile in OS Xs sed hinzu, jedoch nicht in GNU sed.
In OS X werden die Modifikatoren I( ohne Berücksichtigung der Groß- und Kleinschreibung) oder M(mit mehreren Zeilen) nicht unterstützt . Neuere Versionen von FreeBSD sed unterstützen I.
Sed von OS X unterstützt -s( --separate), -u( --unbuffered) oder -z( --null-data) nicht.
Eine BSD-Option, die von GNU sed nicht unterstützt wird -a, besteht darin , wan eine Datei anzuhängen, anstatt eine Datei abzuschneiden.
Beispiele für GNU sed-Befehle, die mit sed von OS X nicht funktionieren:
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
sedselbst ist konform, da es Dinge tut, die der Standard erlaubt (aber nicht erforderlich, nicht spezifiziert). Es gibt Fälle, in denen es nicht konform ist und in denen das AusführenPOSIXLY_CORRECTin der Umgebung hilfreich sein kann. Wie beis/[\n]//gdiesem muss man den Backlash und dienZeichen entfernen, aber stattdessen die Newlines entfernen. Oder das Verhalten desNBefehls in der letzten Zeile.