2 votos

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

Parece que el sed que viene con Mac OS 1.7.4 es el original, sin el + metacaracterística. ¿Puedo tener el + funcionalidad de los metacaracteres?

2voto

Nate Puntos 220

La implementación de OS X de sed utiliza el formato "básico" de expresión regular por defecto, que no soporta + . 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 para usar el formato moderno con el -E interruptor. Sin embargo, esto puede obligarle a reescribir otras partes de su RE para conformarse (por ejemplo, intercambiando \( ... \) con ( ... ) ). Otra opción es utilizar una de las formas alternativas sugeridas anteriormente. A continuación se presentan ejemplos en los que se utilizan los distintos enfoques para hacer coincidir "A" con una o más "B" o "C", seguidas de "D":

sed -E 's/A[BC]+D/[match]/'
sed 's/A[BC]\{1,\}D/[match]/'
sed 's/A[BC][BC]*D/[match]/'

1voto

Petros Puntos 4430

El + es un Extensión GNU de sed que coincide con una o más de las expresiones anteriores, pero la versión en OS X es BSD sed . Una versión de GNU sed se ha portado a OS X en MacPorts . De lo contrario, tendrás que intentar una solución alternativa.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X