OS X jest obecnie wyposażony w wersję FreeBSD sed z 2005 roku. Większość poniższych różnic dotyczy także innych wersji BSD sed.
Zastosowania sed OS X dla zastosowań -E
ERE i GNU sed -r
. -E
to alias dla -r
GNU sed (dodany w 4.2, nieudokumentowany do 4.3). Nowsze wersje FreeBSD i NetBSD sed obsługują zarówno -E
i -r
. OpenBSD sed obsługuje tylko -E
.
-i ''
działa z sed OS X, ale nie z GNU sed. -i
współpracuje z GNU sed, najnowszymi wersjami NetBSD, OpenBSD sed
, ale nie sed OS X. -i -e
współpracuje z obydwoma, ale w przypadku FreeBSD sed
wykonuje kopię zapasową oryginalnego pliku z -e
dopisaniem do nazwy pliku (i musisz przekazać nie więcej niż jedno wyrażenie sed
).
GNU sed interpretuje sekwencje, takie jak \t
, \n
, \001
, \x01
, \w
, i \b
. Sed OS X i POSIX sed interpretują tylko \n
(ale nie w części zamiennej s
).
GNU sed interpretuje \|
, \+
oraz \?
w BRE ale sed i POSIX sed OS X za nie. \(
, \)
, \{
, I \}
są POSIX BRE.
GNU sed pozwala na pomijanie ;
lub nową linię wcześniej, }
ale sed OS X nie.
i
(wstaw), a
(dołącz) i c
(zmień) muszą być poprzedzone odwrotnym ukośnikiem i nową linią w sed OS X i POSIX sed, ale nie w GNU sed. Sed GNU dodaje brakujący przełamane po tekście włożonej przez i
, a
lub c
ale OS X sed nie. Na przykład sed 1ia
jest GNU alternatywą dla sed $'1i\\\na\n'
.
Na przykład printf a|sed -n p
dodaje nową linię w sed OS X, ale nie w GNU sed.
Sed OS X nie obsługuje modyfikatorów I
(bez uwzględniania wielkości liter) ani M
(wielu linii). Nowsze wersje wsparcia dla FreeBSD sed I
.
Sed OS X nie obsługuje -s
( --separate
), -u
( --unbuffered
) ani -z
( --null-data
).
Jedną z opcji BSD, która nie jest obsługiwana przez GNU sed -a
, jest w
dodanie pliku do pliku zamiast obcięcia go.
Przykłady poleceń GNU sed, które nie działają z 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
Sam GNU jest zgodny, ponieważ pozwala na rzeczy dozwolone (ale nie wymagane, nieokreślone) przez standard. Są przypadki, w których jest niezgodny i gdziePOSIXLY_CORRECT
może pomóc uruchomienie go w środowisku. Podobnie jak w przypadkus/[\n]//g
tego, należy usunąć luz in
znaki, ale zamiast tego usunąć nowe linie. Lub zachowanieN
polecenia w ostatnim wierszu.