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


Responder a