OS X actualmente viene con un archivo FreeBSD de 2005. La mayoría de las diferencias a continuación también se aplican a otras versiones de BSD.
Usos sed de OS X para usos sed -E
de ERE y GNU -r
. -E
es un alias para -r
en GNU sed (agregado en 4.2, no documentado hasta 4.3). Las versiones más recientes de FreeBSD y NetBSD son compatibles con ambos -E
y -r
. OpenBSD sed solo es compatible -E
.
-i ''
funciona con OS X's sed pero no con GNU sed. -i
funciona con GNU sed, versiones recientes de NetBSD, OpenBSD sed
, pero no con OS X sed. -i -e
funciona con ambos, pero en el caso de FreeBSD sed
realiza una copia de seguridad del archivo original junto -e
con el nombre del archivo (y no necesita pasar más de una expresión sed
).
GNU interpreta sed secuencias de escape como \t
, \n
, \001
, \x01
, \w
, y \b
. OS X's sed y POSIX sed solo interpretan \n
(pero no en la parte de reemplazo de s
).
GNU sed interpreta \|
, \+
y \?
en BRE, pero sed de OS X y POSIX sed no. \(
, \)
, \{
, Y \}
son POSIX BRE.
GNU sed permite omitir ;
o una nueva línea antes, }
pero sed de OS X no.
i
(insert), a
(append) y c
(change) deben ir seguidos de una barra diagonal inversa y una nueva línea en OS X's sed y POSIX sed pero no en GNU sed. Sed de GNU añade una nueva línea faltante después del texto insertado por i
, a
, o c
sino OS X de sed no lo hace. Por ejemplo, sed 1ia
es una alternativa a GNU sed $'1i\\\na\n'
.
Por ejemplo, printf a|sed -n p
agrega una nueva línea en sed de OS X pero no en sed de GNU.
El sistema operativo OS X no admite los modificadores I
(sin distinción entre mayúsculas y minúsculas) o M
(multilínea). Las versiones más recientes de soporte de sed de FreeBSD I
.
El sedimento de OS X no es compatible con -s
( --separate
), -u
( --unbuffered
) o -z
( --null-data
).
Una opción BSD que no es compatible con GNU sed es -a
, lo que hace que w
anexar a un archivo en lugar de truncar un archivo.
Ejemplos de comandos de sed de GNU que no funcionan con sed de 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
sí es compatible ya que hace cosas permitidas (pero no requeridas, no especificadas) por el estándar. Hay casos en los que no es compatible y dondePOSIXLY_CORRECT
puede ser útil ejecutarlo en el entorno. Al iguals/[\n]//g
que con eso, debe eliminar la reacción y losn
caracteres, pero eliminar las nuevas líneas en su lugar. O el comportamiento delN
comando en la última línea.