Ответ 1
Для Mac OS X используйте -E
вместо -r
для получения ERE. Кроме того, расширений GNU не существует, поэтому вам понадобятся буквальные символы вместо метасимволов \t
и \n
.
Или просто установите GNU sed, конечно.
Я использую эту команду 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.
Для Mac OS X используйте -E
вместо -r
для получения ERE. Кроме того, расширений GNU не существует, поэтому вам понадобятся буквальные символы вместо метасимволов \t
и \n
.
Или просто установите GNU sed, конечно.
(
является стандартным для perl, а не для sed. Вместо этого вы должны использовать \(
. Mac OS X не использует GNU sed.
Я думаю, что добавление -E
сделает его работу для обоих.