La expresión regular no coincide

La expresión regular no coincide

¿Por qué esto no coincide...?

sed -e '/--Updated?[[:space:]]+Date/d' inputfile

este..:

--Updated Date: 2013-11-06 15:32:13

d?es porque a veces tengo Update Date, y a veces Updated Date.

para retirar? Lo he probado \stambién, pero no funciona.

Respuesta1

necesitas usar el -rparámetro. intenta usar

sed -r '/--Updated?[[:space:]]+Date/d' inputfile

actualizando la respuesta

Cuando utilices sed '/something/d', se eliminarán todas las líneas que coincidan con esto.

-r - El parámetro -r utiliza expresiones regulares extendidas.

Dentro de la expresión hay 2 expresiones regulares.

[[:space:]]- Coincidir con todos los caracteres de espacio en blanco, incluidos los saltos de línea

? - optional

+- una o más veces.

Entonces, el comando sed eliminará cada línea que coincida con --updated y uno o más espacios en blanco y luego la Fecha, pero debido a ? el carácter d es opcional. como:

--Updated Date: 2013-11-06 15:32:13
--Updated   Date: 2013-11-06 15:32:13
--Updated           Date: 2013-11-06 15:32:13
--Update Date: 2013-11-06 15:32:13

Respuesta2

Para hacer esto usando expresiones regulares básicas POSIX, lo más cerca que puedo llegar es:

sed '/--Updated*[[:space:]][[:space:]]*Date/d' inputfile

Lamentablemente, no existe un sustituto real para ?, por lo que *se utiliza un que también coincidiría con varios ds. Sin +embargo, se puede reemplazar simplemente repitiendo el patrón y usando a *para la segunda repetición.

Actualizar

En realidad, la forma de conseguir el efecto equivalente de las expresiones extendidas es utilizar dos patrones:

sed \'
  /--Updated[[:space:]][[:space:]]*Date/d
  /--Update[[:space:]][[:space:]]*Date/d
  ' inputfile

Respuesta3

Con gnu sed 4.2.2 en cygwin, agregue la -rbandera:

 '--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'

no imprime ningún resultado. -ractiva las expresiones regulares extendidas ?y +funcionará como esperas. Elreferencia para expresiones regulares extendidasUtilizo la mayoría de los puntos ?y +tengo que tener una barra invertida inicial en las expresiones regulares básicas (la predeterminada) para que tengan un significado especial.

información relacionada