OS X est actuellement livré avec une version de FreeBSD sed de 2005. La plupart des différences ci-dessous s’appliquent également aux autres versions de BSD sed.
OS X utilise sed -E
pour ERE et GNU sed -r
. -E
est un alias pour -r
dans GNU sed (ajouté dans 4.2, non documenté jusqu'à 4.3). Les nouvelles versions de FreeBSD et NetBSD sed supportent à la fois -E
et -r
. OpenBSD sed ne supporte que -E
.
-i ''
fonctionne avec sed sous OS X mais pas sous GNU. -i
fonctionne avec GNU sed, les versions récentes de NetBSD, OpenBSD sed
, mais pas avec OS X sed. -i -e
fonctionne avec les deux, mais dans le cas de FreeBSD, il sed
crée une sauvegarde du fichier d'origine avec -e
le nom de fichier ajouté (et vous ne devez pas transmettre plus d'une expression à sed
).
GNU sed interprète les séquences d' échappement comme \t
, \n
, \001
, \x01
, \w
et \b
. OS X sed et POSIX sed n'interprètent que \n
(mais pas dans la partie de remplacement de s
).
GNU sed interprète \|
, \+
et \?
en BRE, mais sed et POSIX sed d’OS X ne le font pas. \(
, \)
, \{
Et \}
sont BRE Posix.
Sed de GNU autorise l’omission ;
ou une nouvelle ligne auparavant, }
mais pas la sed d’OS X.
i
(insert), a
(append), et c
(change) doivent être suivis d'une barre oblique inverse et d'une nouvelle ligne dans OS X sed et POSIX sed, mais pas dans GNU sed. GNU sed ajoute une nouvelle ligne manquante après le texte inséré par i
, a
ou , c
mais OS X de sed ne fonctionne pas. Par exemple, sed 1ia
est une alternative GNU à sed $'1i\\\na\n'
.
Par exemple, printf a|sed -n p
ajoute une nouvelle ligne dans sed sous OS X mais pas dans GNU sed.
OS X sed ne prend pas en charge les modificateurs ( I
insensibles à la casse) ou M
(multilignes). Les nouvelles versions du support sed de FreeBSD I
.
OS X sed ne prend pas en charge -s
( --separate
), -u
( --unbuffered
) ou -z
( --null-data
).
Une option BSD non prise en charge par GNU sed est celle -a
qui w
ajoute à un fichier au lieu de tronquer un fichier.
Exemples de commandes GNU sed qui ne fonctionnent pas avec sed:
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
lui-même est conforme car il fait des choses autorisées (mais non requises, non spécifiées) par la norme. Il existe des cas où il n'est pas conforme et où son utilisationPOSIXLY_CORRECT
dans l'environnement peut aider. Comme avecs/[\n]//g
cela, il faut supprimer le backlash et lesn
caractères, mais supprimer les nouvelles lignes à la place. Ou le comportement de laN
commande sur la dernière ligne.