sed no recupera todos los valores para el segundo parámetro
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!
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.