2010-12-15 7 views
15

Estoy tratando de encontrar y reemplazar una o más apariciones de un personaje usando sed en un mac, sed a partir de los comandos generales de BSD.¿Cómo escapar signo más en mac os x (BSD) sed?

Trato:

echo "foobar" | sed -e "s/o+//g 

esperando ver:

fbar 

Pero en lugar de eso ver

foobar 

que puede, por supuesto, simplemente ampliar la ventaja manualmente con:

echo "foobar" | sed -e "s/oo*//g" 

pero ¿qué debo hacer para que funcione el signo más?

+0

usando la bandera '/ g',' s/o // g' es suficiente para reemplazar todas las ocurrencias 'o'. – khachik

Respuesta

27

Usando la bandera /g, s/o//g es suficiente para reemplazar todas las ocurrencias.

Por qué + no funciona como se esperaba: en el viejo, obsoleto re + es un carácter ordinario (así como |, ?). Debe especificar -Esed bandera para hacer que el uso de expresiones regulares modernos:

echo "foobar" | sed -E -e "s/o+//" 
# fbar 

Fuente: man 7 re_format.

+0

+1, con el indicador ''E' funciona como se describe. Por alguna razón, no pude encontrar eso en las páginas de información/hombre. Oficialmente, parece que las opciones '-r' y' --regexp-extended' son el camino a seguir. – Chriki

2
echo "foobar" | sed -e "s/o\\+//g" 

funcionó para mí en Mac OS X 10.6.

Recuerdo que reemplacé mi versión BSD de sed con GNU sed 4.2, por lo que esto puede o no funcionar para usted.

+0

No funciona en 10.5 ... – khachik

+0

En Terminal.app, es posible que deba utilizar una barra diagonal inversa doble. – eyelidlessness

+0

@eyelidlessness No funciona tampoco. Ver mi respuesta para más información. – khachik

0

Sed es triste para las expresiones regulares. Usted podría intentar el -E, lo que podría trabajar con BSD, o usted podría probar este lugar:

sed -e "s/o\{1,\}/" 

quizás hay demasiados de sed hacia fuera allí para tener una herramienta útil en cualquier sistema.

0

Puede utilizar esto, en Linux o Unix.

echo "foobar" | perl -pe "s/o+//g" 
+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). –

+0

Usar esto puede resolver el problema y no necesita atención sobre el problema de escape. –