¿Cómo obtener + metacharacter para sed en la Terminal?

2

Parece que sed que viene con Mac OS 1.7.4 es el original, sin el + metacharacter. ¿Puedo obtener la funcionalidad + metacharacter?

    
pregunta ipavlic 19.07.2012 - 21:55

2 respuestas

1

El + es una extensión GNU de sed que coincide con uno o más de la expresión anterior, pero la versión en OS X es BSD sed . Se ha portado una versión de GNU sed a OS X en MacPorts . De lo contrario, tendrá que intentar una solución.

Por ejemplo, para hacer coincidir uno o más dígitos, puedes usar [0-9][0-9]* en lugar de [0-9]+

    
respondido por el conorgriffin 19.07.2012 - 23:18
2

La implementación de sed de OS X utiliza el formato de expresión regular "básico" de forma predeterminada, que no admite + . De man re_format :

Obsolete (''basic'') regular expressions differ in several respects.  '|'
is an ordinary character and there is no equivalent for its functional-
ity.  '+' and '?' are ordinary characters, and their functionality can be
expressed using bounds ('{1,}' or '{0,1}' respectively).  Also note that
'x+' in modern REs is equivalent to 'xx*'.  The delimiters for bounds are
'\{' and '\}', with '{' and '}' by themselves ordinary characters.  The
parentheses for nested subexpressions are '\(' and '\)', with '(' and ')'
by themselves ordinary characters. [...]

Entonces, ¿qué puedes hacer? Bueno, una posibilidad es decirle a sed que use el formato moderno con el interruptor -E . Sin embargo, esto puede forzarle a reescribir otras partes de su RE para que se ajusten (por ejemplo, intercambiar \( ... \) con ( ... ) ). Otra opción es usar uno de los formularios alternativos sugeridos anteriormente. Aquí hay ejemplos que usan los diversos enfoques para hacer coincidir "A" seguido de uno o más "B" o "C", seguido de "D":

sed -E 's/A[BC]+D/[match]/'
sed 's/A[BC]\{1,\}D/[match]/'
sed 's/A[BC][BC]*D/[match]/'
    
respondido por el Gordon Davisson 20.07.2012 - 02:10

Lea otras preguntas en las etiquetas