substituindo a terceira ocorrência de um padrão usando sed

5

Aqui está um comando sed . Quero substituir a terceira ocorrência de 00 a 11

echo "0000000000000000" | sed -e 's/00/11/3'

A saída é:

0000110000000000

Mas achei que a saída seria:

0011000000000000

primeira ocorrência de 00 :

{00}00000000000000

segundo:

0{00}0000000000000

e terceiro:

00{00}000000000000

Alguém pode explicar o que está acontecendo?

    
por Majid Azimi 21.04.2012 / 07:06

1 resposta

5

Quando um padrão de regex sed foi correspondido, sua próxima pesquisa começa imediatamente após o padrão de correspondência ... Para fazer o que você deseja, você precisa de algo como perl regex Asserções de Look-Ahead e Look-Behind Zero-width .

No seu caso, você quer afirmar (verificar) que um sub-padrão (o segundo 0 ) existe após o primeiro 0 do seu Padrão geral. O sub-padrão é tratado como tendo largura zero, e assim, quando o padrão geral é correspondido, a pesquisa continua imediatamente após a parte do padrão, , após o seu primeiro zero 0 .

    
por 21.04.2012 / 07:37