Tiago Barcellos Peczenyj escreveu:
> Esse é o problema do comando q no lugar errado
>
> $ cat xxx
> 321
> 852
> vazio
> vazio
> vazio
>
> $ sed -n '/vazio/{=;q}' xxx
> 3
>
> $ sed "$(sed -n '/vazio/{=;q}' xxx)s/vazio/qqcoisa/" xxx
> 321
> 852
> qqcoisa
> vazio
> vazio
>
> Sacou?
>
> 2008/4/29 César Vianna <[EMAIL PROTECTED]>:
>>
>>
>>
>>
>>
>> ok.
>>
>> mas o resultado esperado seria:
>>
>> teste
>> teste
>> qualquercoisa
>> a
>> a
>>
>> Teria que apenas substituir a primeira linha encontrada e preservar as
>> demais
>>
Outra abordagem:
sed '/vazio/{s/vazio/qualquercoisa/;:a;N;ba}' arquivo
Na primeira ocorrência de vazio, substitui vazio por qualquercoisa. Em
seguida, evita o loop natural do sed concatenando todas as linhas até o
fim do arquivo. Como a concatenação mantém o \n, na hora de escrever
tudo na stdout, o texto é preservado.
O loop de concatenação é definido com o uso de rótulos e desvio
incondicional.
--
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP