Pregunta

Estoy intentando ejecutar el comando para extraer un rango de fechas de un archivo e imprimirlas

ej: sed -ne '/ ^ 2009-08-20 /, / ^ 2009-08-26 / p'

Sin embargo, tengo varias ocurrencias del 2009-08-26 en el archivo, quiero que todas regresen, pero solo devuelve la primera. ¿Es posible que TODOS regresen?

¡Gracias!

¿Fue útil?

Solución

sed -ne '/ ^ 2009-08-20 /, / ^ 2009-08-26 / b e; / ^ 2009-08-26 / b e; d;: e p'

Para explicar: 'e' es una etiqueta y si está en el rango se ramifica a esa etiqueta. Le das una segunda oportunidad y compruebas si es el final del rango. De lo contrario, elimine la línea.

Otros consejos

La razón por la que solo devuelve la primera coincidencia de la fecha de finalización es que un rango varía desde la primera coincidencia del primer patrón hasta la primera coincidencia del segundo patrón (inclusive) y luego dejará de imprimir hasta que ocurra el primer patrón otra vez. Si no tiene problemas para escribir el segundo patrón tres veces, puede usar

sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'

que imprimirá una línea si está entre la fecha de inicio (inclusive) y la fecha de finalización (exclusivo) - ¡eso es lo que! hace) o si comienza con la fecha de finalización.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top