Olhando para grep ou egrep ano varia de 1965-1996

3

Eu tenho um grep que funciona para algumas das datas, mas tenho problemas para fazer com que meu cérebro esteja totalmente funcional.

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

pega alguns corretamente, mas eu estou tentando pegar todos os anos entre 1965-1996.

Aqui está a solução atual, mas procurando uma linha realmente, mas aqui está o que eu obtive até agora:

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

Procurando melhor e mais curto, se possível?

    
por user3347022 15.10.2014 / 22:04

3 respostas

12

Intervalos de datas & regex não é realmente uma boa combinação. Se eu interpretar o $ em seu grep corretamente, a data é o último campo em uma linha.

Tente isto:

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

Se você precisar usar o grep, ele se tornará mais complicado:

grep -E '196[5-9]|19[78][0-9]|199[0-6]$' filename
    
por 15.10.2014 / 22:11
2

Você deve observar que egrep permite que o 19 seja fatorado, como:

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

que pode ser considerado mais claro.

    
por 16.10.2014 / 00:03
0
$ (for i in {1900..2000}; do echo $i; done) | egrep '(196[5..9]|19[78][0-9]|199[0-6])'
1965
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
    
por 15.10.2014 / 22:20

Tags