OS X saat ini hadir dengan sed FreeBSD dari tahun 2005. Sebagian besar perbedaan di bawah ini juga berlaku untuk versi sed BSD lainnya.
Penggunaan OS X -E
untuk ERE dan penggunaan GNU -r
. -E
adalah alias untuk -r
dalam GNU sed (ditambahkan pada 4.2, tidak didokumentasikan hingga 4.3). Versi FreeBSD dan NetBSD yang lebih baru mendukung keduanya -E
dan -r
. OpenBSD hanya mendukung sed -E
.
-i ''
bekerja dengan sed OS X tetapi tidak sed GNU. -i
bekerja dengan GNU sed, versi terbaru NetBSD, OpenBSD sed
, tetapi tidak untuk OS X. -i -e
bekerja dengan keduanya tetapi dalam kasus FreeBSD sed
membuat cadangan dari file asli dengan -e
ditambahkan ke nama file (dan Anda harus memberikan tidak lebih dari satu ekspresi ke sed
).
GNU menafsirkan sed melarikan diri urutan seperti \t
, \n
, \001
, \x01
, \w
, dan \b
. OS X dan sed POSIX hanya menafsirkan \n
(tetapi tidak di bagian penggantian s
).
GNU sed menginterpretasikan \|
,, \+
dan \?
dalam BRE tetapi OS X dan sed POSIX tidak. \(
, \)
, \{
, Dan \}
adalah POSIX BRE.
GNU sed memungkinkan penghilangan ;
atau baris baru sebelumnya }
tetapi sed OS X tidak.
i
(masukkan), a
(tambahkan), dan c
(ubah) harus diikuti oleh garis miring terbalik dan baris baru dalam OS X dan sed POSIX tetapi tidak dalam GNU sed. GNU sed menambahkan baris baru hilang setelah teks yang dimasukkan oleh i
, a
atau c
tapi OS X sed tidak. Sebagai contoh sed 1ia
adalah alternatif GNU untuk sed $'1i\\\na\n'
.
Misalnya printf a|sed -n p
menambahkan baris baru di sed OS X tetapi tidak di sed GNU.
Sed OS X tidak mendukung pengubah I
(case-insensitive) atau M
(multi-line). Dukungan FreeBSD versi terbaru I
.
Sed OS X tidak mendukung -s
( --separate
), -u
( --unbuffered
), atau -z
( --null-data
).
Salah satu opsi BSD yang tidak didukung oleh GNU sed adalah -a
, yang membuat w
menambahkan ke file bukannya memotong file.
Contoh perintah sed GNU yang tidak berfungsi dengan 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
itu sendiri patuh karena melakukan hal-hal yang diperbolehkan (tetapi tidak wajib, tidak ditentukan) oleh standar. Ada kasus di mana itu tidak sesuai dan di mana menjalankannya denganPOSIXLY_CORRECT
lingkungan dapat membantu. Suka dengans/[\n]//g
itu harus menghapus serangan balik dann
karakter tetapi hapus baris baru sebagai gantinya. Atau perilakuN
perintah di baris terakhir.