2011-10-27 12 views
14

estoy usando este comando sed en Linux, para reparar un archivo, y funciona bien:obras comando sed en Linux, pero no en OS X

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

Pero cuando intento este comando en OS X, estoy consiguiendo un error:

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

por lo tanto, puede ayudar a nadie que haga comando que funcionará tanto en Linux y OS X?

Por cierto, he intentado comando como:

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

pero no funciona en Linux.

Respuesta

28

Para Mac OS X sed, use -E en lugar de -r para obtener ERE. Además, las extensiones de GNU no están allí, por lo que necesitará caracteres literales en lugar de los metacaracteres \t y \n.

O simplemente instale GNU sed, por supuesto.

0

Creo que agregar -E hará que funcione para ambos.

+0

Necesario pero no suficiente, me temo. –

1

( es estándar para perl, no para sed. Debería usar \( en su lugar. Mac OS X no usa GNU sed.

+0

'-r' es una bandera para expresiones regulares extendidas. así que no necesitamos escapar '(' –

+0

'-r' no está documentado en [la página del manual de sed de Apple] (http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/ man1/sed.1.html). – mouviciel

+0

Quizás algo de GNU. –

Cuestiones relacionadas