Команда Sed работает в Linux, но не в OS X - PullRequest
14 голосов
/ 27 октября 2011

Я использую эту команду 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.

Ответы [ 3 ]

28 голосов
/ 27 октября 2011

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

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

1 голос
/ 27 октября 2011

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

0 голосов
/ 27 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...