Команда Sed работает в Linux, но не на OS X

Я использую эту команду sed в Linux, чтобы исправлять один файл, и он отлично работает:

sed -i -r "s/(\tpublic function __call.*)/\1\n\t\treturn null;/" rb.php

Но когда я пытаюсь выполнить эту команду в OS X, я получаю сообщение об ошибке:

sed: 1: "s/(\tpublic function __ ...": \1 not defined in the RE

Итак, может ли кто-нибудь помочь мне сделать команду, которая будет работать как на Linux, так и на OS X?

Кстати, я попробовал команду вроде:

sed -i '' -r "s/(\tpublic function __call.*)/\1\n\t\treturn null;/" rb.php

но он не работает в Linux.

Ответы

Ответ 1

Для Mac OS X используйте -E вместо -r для получения ERE. Кроме того, расширений GNU не существует, поэтому вам понадобятся буквальные символы вместо метасимволов \t и \n.

Или просто установите GNU sed, конечно.

Ответ 2

( является стандартным для perl, а не для sed. Вместо этого вы должны использовать \(. Mac OS X не использует GNU sed.

Ответ 3

Я думаю, что добавление -E сделает его работу для обоих.