Combinando uma sequência numérica no grep

4

Então, eu estou tentando combinar uma seqüência numérica de ano com o grep e isso deve ser fácil. Estou um pouco confuso com o fato de que meu regex simplista não está funcionando.

O que estou fazendo é executar uma ferramenta que arquiva alguns arquivos, mas precisa verificar a data do arquivo para colocá-lo no diretório correto. Eu já tenho a entrada formatada corretamente que vem a mim como:

<span class='t-d'>1994-Oct-28</span>

Este é apenas um exemplo, quando eu tenho isso, quero pegar apenas a parte de 1994 e usá-lo para continuar arquivando no ano correto. Eu estava assumindo que algo assim seria suficiente:

grep -o '[0-9]{4}'

Mas isso não parece corresponder a nada. Quando tento algo como:

grep -o '[0-9]'

combina todos os números separados, então 1 9 9 4 2 e 8.

Portanto, minha sintaxe está errada, mas quanto maior o meu conhecimento, isso corresponderá a um número de 0 a 9 4 vezes, o {} especificando o comprimento em um intervalo ou em um intervalo exato. Se alguém pudesse me ajudar com esta sintaxe simples, seria muito apreciado.

    
por Yonathan Klijnsma 22.07.2012 / 14:22

1 resposta

5

A {4} é uma expressão regular estendida . grep não vai entender, a menos que você especifique a opção -E :

-E, --extended-regexp
       Interpret PATTERN as an extended regular expression (ERE, see below).  (-E is specified by POSIX.)

tente com

grep -E '[0-9]{4}'

exemplo

$ echo abcd1234abcd | grep -o -E '[0-9]{4}'
1234

você também pode usar a classe de caractere [:digit:] para evitar problemas com locais onde a ordem dos símbolos pode ser diferente:

$ echo abcd1234abcd | grep -o -E '[[:digit]]{4}'
1234

se, por algum motivo, você não quiser usar expressões regulares estendidas, poderá usar

grep -o '[0-9][0-9][0-9][0-9]'
    
por 22.07.2012 / 14:39