Se você estiver usando o GNU sed
, tente:
sed -e '0,/claudio/ s/claudio/claudia/' nomi
sed
não inicia a verificação da expressão regular que termina um intervalo até após a linha que inicia esse intervalo.
De man sed
(página de manual do POSIX, ênfase minha):
An editing command with two addresses shall select the inclusive range from the first pattern space that matches the first address through the next pattern space that matches the second.
Usando awk
Os intervalos em awk
funcionam mais como você esperava:
$ awk 'NR==1,/claudio/{sub(/claudio/, "claudia")} 1' nomi
claudia
antonio
claudio
michele
Explicação:
-
NR==1,/claudio/
Este é um intervalo que começa com a linha 1 e termina com a primeira ocorrência de
claudio
. -
sub(/claudio/, "claudia")
Enquanto estamos no intervalo, este comando substituto é executado.
-
1
Esta abreviada enigmática do awk para imprimir a linha.