El año grep o egrep oscila entre 1965 y 1996

El año grep o egrep oscila entre 1965 y 1996

Tengo un grep que funciona para algunas de las fechas, pero tengo problemas para que mi cerebro lo haga completamente funcional.

grep 19[6-9][5-6]$ filename

captura algunos correctamente, pero estoy buscando capturar todos los años entre 1965 y 1996.

Aquí está la solución actual, pero en realidad busco una sola línea, pero esto es lo que he obtenido hasta ahora:

grep 196[5-9]$ filename
grep 197[0-9]$ filename
grep 198[0-9]$ filename
grep 199[0-6]$ filename

¿Buscas algo mejor y más corto si es posible?

Respuesta1

Los rangos de fechas y las expresiones regulares no coinciden tan bien. Si interpreto correctamente el $ en su grep, la fecha es el último campo de una línea.

Prueba esto:

awk '$NF >= 1965 && $NF <= 1996' filename

Si debes usar grep, se vuelve más complicado:

grep -E '196[5-9]|19[78][0-9]|199[0-6]$' filename

Respuesta2

Debe tener en cuenta que egreppermite 19factorizarlo, como tal:

grep -E '19(6[5-9]|[78][0-9]|9[0-6])$' filename

lo que podría considerarse más claro.

Respuesta3

También puedes usar seqel que encuentro mucho más legible:

grep -E "$(seq -s "|" 1965 1996)" filename

-s, --separador=CADENA

Respuesta4

Usar sintaxis estándar greppara extraer líneas que terminen con cualquier número de subcadena en el rango inclusivo de 1965 a 1996 (esto también essimilaral intento del usuario en la pregunta):

grep -e '196[5-9]$' \
     -e '197[0-9]$' \
     -e '198[0-9]$' \
     -e '199[0-6]$'

Esto extrae líneas que terminan con cualquiera de los números que le interesan. Tenga en cuenta que las expresiones generalmente deben estar entre comillas.

Para evitar coincidencias, por ejemplo 231974(que coincide con 1974) al final de la línea, es posible que desees insertar \<al comienzo de cada número en el patrón:

grep -e '\<196[5-9]$' \
     -e '\<197[0-9]$' \
     -e '\<198[0-9]$' \
     -e '\<199[0-6]$'

Esto obliga a que el número sea una palabra y no una subcadena de otra palabra más larga.

información relacionada