[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