OS X attualmente viene fornito con una versione di FreeBSD sed del 2005. La maggior parte delle differenze di seguito si applica anche ad altre versioni di BSD sed.
Gli usi sed di OS X per gli usi sed -E
di ERE e GNU sed -r
. -E
è un alias per -r
in GNU sed (aggiunto in 4.2, non documentato fino a 4.3). Le versioni più recenti di FreeBSD e NetBSD sed supportano sia -E
e -r
. OpenBSD sed supporta solo -E
.
-i ''
funziona con sed di OS X ma non con GNU sed. -i
funziona con GNU sed, versioni recenti di NetBSD, OpenBSD sed
, ma non con OS X sed. -i -e
funziona con entrambi, ma nel caso di FreeBSD sed
esegue un backup del file originale con l' -e
aggiunta al nome del file (e non devi passare più di un'espressione a sed
).
GNU sed interpreta sequenze di escape come \t
, \n
, \001
, \x01
, \w
, e \b
. Le versioni sed e POSIX di OS X interpretano solo \n
(ma non nella parte sostitutiva di s
).
GNU sed interpreta \|
, \+
e \?
in BRE ma sed X di OS X e POSIX no. \(
, \)
, \{
, E \}
sono POSIX BRE.
GNU sed consente di omettere ;
o una nuova riga prima }
ma OS X sed non lo fa.
i
(insert), a
(append) e c
(change) devono essere seguiti da una barra rovesciata e da una nuova riga nella versione OS X e POSIX ma non nella versione GNU sed. Sed GNU aggiunge un ritorno a capo mancante dopo il testo inserito da i
, a
o c
ma OS X di sed non lo fa. Ad esempio sed 1ia
è un'alternativa GNU a sed $'1i\\\na\n'
.
Ad esempio printf a|sed -n p
aggiunge una nuova riga nella versione di OS X ma non nella versione di GNU.
La sed di OS X non supporta i modificatori I
(senza distinzione tra maiuscole e minuscole) o M
(multilinea). Versioni più recenti del supporto sed di FreeBSD I
.
La sed di OS X non supporta -s
( --separate
), -u
( --unbuffered
) o -z
( --null-data
).
Un'opzione BSD che non è supportata da GNU sed è -a
, che rende w
append a un file invece di troncare un file.
Esempi di comandi GNU sed che non funzionano con sed di 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
stesso è conforme in quanto fa le cose consentite (ma non richieste, non specificate) dallo standard. Ci sono casi in cui non è conforme e dovePOSIXLY_CORRECT
può essere di aiuto eseguirlo nell'ambiente. Come ins/[\n]//g
questo caso è necessario rimuovere gioco en
caratteri, ma rimuovere invece le nuove righe. O il comportamento delN
comando sull'ultima riga.