
¿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 \s
también, pero no funciona.
Respuesta1
necesitas usar el -r
pará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 d
s. 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 -r
bandera:
'--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'
no imprime ningún resultado. -r
activa 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.