Usando sed para substituir n caracteres antes de uma palavra-chave incluindo a palavra-chave?

2

Para substituir tudo antes , uma parte do código abaixo funciona bem.

sed 's/.*keyword/string-to-be-replaced/'

Mas, para substituir n caracteres antes da palavra-chave incluindo a palavra-chave, não consegui encontrar uma solução. Alguém tem uma ideia?

    
por Tolga Varol 29.07.2015 / 21:23

1 resposta

3

Você só precisa de n . dots.

n=[num]
sed "s/.\{$n\}keyword/REPLACE/"

... onde [num] deve representar um número inteiro positivo deve funcionar.

Note que é diferente de .*keyword em pelo menos alguns aspectos importantes.

  1. .* aplica-se a qualquer / todos os caracteres que ocorrem antes da última ocorrência de keyword no padrão de sed espaço, e se houver vários keywords correspondidos de uma só vez, .* consumirá todos menos o último deles.

    • .\{[num]\}keyword corresponderá apenas à ocorrência primeira do padrão que pode ser encontrado no espaço padrão.
  2. .\{[num]\} irá exigir pelo menos [num] -contar caracteres para ocorrer antes palavra-chave para se qualificar uma correspondência, ao passo que .* pode corresponder a keyword , mesmo que seja encontrado à frente de uma linha.

    • Uma expressão que mais se assemelha a esse comportamento, pois corresponderá a até [num] caracteres que ocorrem antes de keyword ser ...

      sed "s/.\{0,$n\}keyword/REPLACE/"
      
por 29.07.2015 / 21:27

Tags