grep: conteúdo inválido de \ {\}

4

Aqui está o comando:

grep '\(2\)[[:digit:]]\{\}' numbers

O que eu quero é combinar exatamente 2 dígitos após o dígito "2", 3 dígitos se eu alterar o dígito "2" para "3" na minha expressão, 4 dígitos se ...

Estou usando referência reversa aqui, mas quando executo este comando, tenho a seguinte saída:

grep: invalid content of \{\}

Como alguém pode mudar minha expressão?

primeira solução: Como a serge respondeu:

2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}

Isso pode realmente funcionar, mas suponha que eu tenha \(34\) como a primeira sub-expressão, gostaria de voltar a referenciar esse número para não ter que implementar os 34 casos (ou mais).

    
por vdegenne 26.02.2013 / 08:20

2 respostas

1

Referências anteriores não são permitidas aqui. Você precisa escrever a expressão que descreverá todos os casos possíveis, por exemplo:

2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}
    
por 26.02.2013 / 09:07
1

Parece que você pretende codificar o primeiro valor em vez de determiná-lo a partir do primeiro dígito real da linha. Considere algo assim:

HOWMUCH=2 grep "\($HOWMUCH\)[[:digit:]]\{$HOWMUCH\}" numbers
    
por 27.02.2013 / 01:39