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 <[EMAIL PROTECTED]>:
>> 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
>> >
>> > 2008/4/29 Flavio Junior <[EMAIL PROTECTED]>:
>> >
>> >
>> > > q
>> > >
>> > > [EMAIL PROTECTED]:~]# echo -e 'teste
>teste
>a
>a
>a'
>> > > teste
>> > > teste
>> > > a
>> > > a
>> > > a
>> > > [EMAIL PROTECTED]:~]# echo -e 'teste
>teste
>a
>a
>a' | sed
>> > > '/a/{s/.*/qualquercoisa/;q}'
>> > > teste
>> > > teste
>> > > qualquercoisa
>> > > [EMAIL PROTECTED]:~]#
>> > >
>> > > mim ser preguiçoso..
>> > >
>> > > Pra casar vazio pode usar: ^$
>> > >
>> > > --
>> > >
>> > > Flavio do Carmo Junior
>> > >
>> > > 2008/4/29 César Vianna <[EMAIL PROTECTED] <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"
>
------------------------------------
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html