OS X в даний час поставляється з FreeBSD sed від 2005 року. Більшість відмінностей нижче стосуються також інших версій BSD sed.
Sed X OS використовує -E
для ERE та GNU sed -r
. -E
є псевдонімом -r
у GNU sed (додано в 4.2, не задокументовано до 4.3). Новіші версії FreeBSD та NetBSD sed підтримують і -E
та, і ін -r
. OpenBSD sed підтримує тільки -E
.
-i ''
працює з sed X OS, але не GNU sed. -i
працює з GNU sed, останніми версіями NetBSD, OpenBSD sed
, але не sed X OS. -i -e
працює з обома, але у випадку FreeBSD sed
робить резервну копію вихідного файлу з -e
додаванням до імені файлу (і вам потрібно передати не більше одного виразу sed
).
GNU SED інтерпретує керуючі послідовності , як \t
, \n
, \001
, \x01
, \w
, і \b
. Sed X OS і POSIX sed інтерпретують лише \n
(але не в замінній частині s
).
GNU sed інтерпретує \|
, \+
і \?
в BRE, але sed X OS і POSIX sed не відповідають. \(
, \)
, \{
, І \}
є POSIX BRE.
GNU sed дозволяє опускати ;
або новий рядок раніше, }
але sed X OS не робить.
i
(вставка), a
(додавання) та c
(зміна) повинні супроводжуватися зворотною косою рискою та новою лінією в sed X OS та POSIX sed, але не в GNU sed. GNU СЕД додає бракуючий символ нового рядка після тексту , вставлений i
, a
або c
але OS X в SED не робить. Наприклад sed 1ia
, альтернатива GNU sed $'1i\\\na\n'
.
Наприклад, printf a|sed -n p
додається новий рядок в sed X OS, але не в GNU sed.
Sed X OS не підтримує I
(нечутливі до регістру) або M
(багаторядкові) модифікатори. Новіші версії підтримки FreeBSD sed I
.
Sed X OS не підтримує -s
( --separate
), -u
( --unbuffered
) або -z
( --null-data
).
Один варіант BSD, який не підтримується GNU sed, - -a
це w
додавання до файлу, а не обрізання файлу.
Приклади команд GNU sed, які не працюють з sed X OS:
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
Сам GNU відповідає сумісності, оскільки робить речі, дозволені (але не обов'язкові, не визначені) стандартом. Бувають випадки, коли це не сумісне і де його використанняPOSIXLY_CORRECT
в навколишньому середовищі може допомогти. Як і зs/[\n]//g
цим, необхідно видалити люфт іn
символи, але замість цього видалити нові рядки. Або поведінкуN
команди в останньому рядку.