[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Re: [shell-script] Sed - troca apenas da primeira ocorrência
From: |
mop |
Subject: |
Re: Re: [shell-script] Sed - troca apenas da primeira ocorrência |
Date: |
Tue, 29 Apr 2008 21:33:56 -0300 |
Tiago, já que você está de boa vontade e sed não é a minha praia:
Estranhei o relato no post do Cézar, pois pelo pouco que sei o default de
de substituição no sed é apenas a primeira.
Fiz aqui e aconteceu o que eu esperava.
$ echo 1vazio2vazio3|sed s/vazio/qualquercoisa/
1qualquercoisa2vazio3
Como pode ocorrer aquilo relatado no post inicial?
Versão de sed?
Arquivo de configuração?
Ou eu não vi algo óbvio?
Obrigado.
------------------------------------------
>From: "Tiago Barcellos Peczenyj"
>
>Não sei se me fiz entender, vou esclarecer alguns pontos.
>
>Os comandos do sed são executados linha-a-linha e o que aconteceu em
>uma linha não afeta as proximas, exceto quando paramos o fluxo ou
>pulamos para a proxima linha. Na maioria das linguagens isso seria
>feito via um if, mas não há if em sed :(
>
>Porém, se eu soubesse qual a linha que eu quero alterar, isto é, qual
>a primeira linha que possui a palavra "vazio", a minha vida é
>simplificada :)
>
>sed -n '/vazio/{=;q}' arquivo
>
>isso imprime, na ocorrencia de "vazio", o numero da linha (=) e, em
>seguida, termina o script (q).
>
>agora basta executar o comando
>
>sed "NUMEROs/vazio/qqcoisa/" arquivo # na linha NUMERO, execute...
>
>Que poderia ser feito assim:
>sed "$( comando )s/vazio/qqcoisa/" xxx
>
>Ou
>
>LINHA=$( comando )
>
>sed "${LINHA}s/vazio/qqcoisa/" xxx
>
>Espero que seja util
>
>T.
>
>2008/4/29 Tiago Barcellos Peczenyj <address@hidden>:
>> 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
>> >
>> > 2008/4/29 Flavio Junior <address@hidden>:
>> >
>> >
>> > > q
>> > >
>> > > [root@catatau:~]# echo -e 'teste
>teste
>a
>a
>a'
>> > > teste
>> > > teste
>> > > a
>> > > a
>> > > a
>> > > [root@catatau:~]# echo -e 'teste
>teste
>a
>a
>a' | sed
>> > > '/a/{s/.*/qualquercoisa/;q}'
>> > > teste
>> > > teste
>> > > qualquercoisa
>> > > [root@catatau:~]#
>> > >
>> > > mim ser preguiçoso..
>> > >
>> > > Pra casar vazio pode usar: ^$
>> > >
>> > > --
>> > >
>> > > Flavio do Carmo Junior
>> > >
>> > > 2008/4/29 César Vianna <address@hidden <cesar.vianna%40gmail.com>
>> >
>> > > >:
>> > >
>> > > >
>> > > >
>> > > >
>> > > >
>> > > >
>> > > >
>> > > > Tenho um arquivo texto com o seguinte conteúdo
>> > > >
>> > > > 321
>> > > > 852
>> > > > vazio
>> > > > vazio
>> > > > vazio
>> > > >
>> > > > Quero trocar a primeira ocorrência de "vazio" por "qualquercoisa"
>> > > >
>> > > > Fiz assim
>> > > >
>> > > > sed "s/vazio/qualquercoisa/" estac.txt
>> > > >
>> > > > e
>> > > >
>> > > > sed "s/vazio/qualquercoisa/1" estac.txt
>> > > >
>> > > > Mas em ambas opções ele troca todas as ocorrências de vazio
>> > > >
>> > > > Sei que tem alguma opção para interromper na primeira ocorrência, mas
>> > > não
>> > > > estou lembrando. Como diz o Júlio: "Para o sed não ser guloso"
>> > > >
>> > > > [As partes desta mensagem que não continham texto foram removidas]
>> > > >
>> > > >
>> > >
>> > >
>> >
>> > [As partes desta mensagem que não continham texto foram removidas]
>> >
>> >
>>
>>
>>
>> --
>> Tiago B Peczenyj
>> Linux User #405772
>>
>> http://peczenyj.blogspot.com/
>> "what does not kill us makes us stronger"
>>
>
>
>
>--
>Tiago B Peczenyj
>Linux User #405772
>
>http://peczenyj.blogspot.com/
>"what does not kill us makes us stronger"
>
- Re: Re: [shell-script] Sed - troca apenas da primeira ocorrência,
mop <=