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

Responder a