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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Sed - troca apenas da primeira ocorrência


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Sed - troca apenas da primeira ocorrência
Date: Tue, 29 Apr 2008 21:16:55 -0300

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\nteste\na\na\na'
>  >  > teste
>  >  > teste
>  >  > a
>  >  > a
>  >  > a
>  >  > [root@catatau:~]# echo -e 'teste\nteste\na\na\na' | 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]