shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Sed - troca apenas da primeira ocorrência


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Sed - troca apenas da primeira ocorrência
Date: Tue, 29 Apr 2008 23:53:41 -0300
User-agent: Thunderbird 2.0.0.0 (X11/20070326)

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 <address@hidden>:
>>
>>
>>
>>
>>
>> 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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]