OS X hiện đi kèm với một sed FreeBSD từ năm 2005. Hầu hết các khác biệt dưới đây cũng áp dụng cho các phiên bản sed BSD khác.
Sử dụng sed của OS X cho sử dụng sed -E
ERE và GNU -r
. -E
là một bí danh cho -r
GNU sed (được thêm vào 4.2, không được ghi lại cho đến 4.3). Các phiên bản mới hơn của FreeBSD và NetBSD sed hỗ trợ cả -E
và -r
. OpenBSD sed chỉ hỗ trợ -E
.
-i ''
hoạt động với sed của OS X nhưng không phải GNU sed. -i
hoạt động với GNU sed, các phiên bản gần đây của NetBSD, OpenBSD sed
, nhưng không phải là sed của OS X. -i -e
hoạt động với cả hai nhưng trong trường hợp FreeBSD sed
tạo bản sao lưu của tệp gốc có -e
gắn tên tệp (và bạn cần chuyển không quá một biểu thức cho sed
).
GNU diễn giải sed chuỗi escape như \t
, \n
, \001
, \x01
, \w
, và \b
. Sed của OS X và sed POSIX chỉ diễn giải \n
(nhưng không phải trong phần thay thế của s
).
GNU sed phiên dịch \|
, \+
và \?
trong BRE nhưng sed của POS X và sed POSIX thì không. \(
, \)
, \{
, Và \}
là POSIX BRE.
GNU sed cho phép bỏ qua ;
hoặc một dòng mới trước }
nhưng sed của OS X thì không.
i
(chèn), a
(nối thêm) và c
(thay đổi) phải được theo sau bởi dấu gạch chéo ngược và dòng mới trong sed và POSIX của OS X nhưng không phải trong GNU sed. GNU sed thêm một dòng mới mất tích sau khi văn bản chèn vào bởi i
, a
hoặc c
nhưng OS X sed không. Ví dụ sed 1ia
là một thay thế GNU cho sed $'1i\\\na\n'
.
Ví dụ: printf a|sed -n p
thêm một dòng mới trong sed của OS X nhưng không có trong GNU sed.
Sed X của OS X không hỗ trợ các bộ sửa đổi I
(không phân biệt chữ hoa chữ thường) hoặc M
(nhiều dòng). Các phiên bản mới hơn của hỗ trợ sed FreeBSD I
.
Sed X của OS X không hỗ trợ -s
( --separate
), -u
( --unbuffered
) hoặc -z
( --null-data
).
Một tùy chọn BSD không được GNU sed hỗ trợ là -a
, điều này làm cho việc w
thêm vào một tệp thay vì cắt bớt một tệp.
Ví dụ về các lệnh GNU sed không hoạt động với sed của 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
tự tuân thủ vì nó làm những điều được cho phép (nhưng không bắt buộc, không xác định) theo tiêu chuẩn. Có những trường hợp nó không tuân thủ và việc chạy nóPOSIXLY_CORRECT
trong môi trường có thể giúp ích. Giống như vớis/[\n]//g
điều đó phải loại bỏ phản ứng dữ dội vàn
ký tự nhưng thay vào đó loại bỏ dòng mới. Hoặc hành vi củaN
lệnh trên dòng cuối cùng.