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

[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"
>



reply via email to

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