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

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

RES: RES: [shell-script] sed ou grep?Again...


From: Julio Cezar Neves - DISB.O
Subject: RES: RES: [shell-script] sed ou grep?Again...
Date: Fri, 21 Jul 2000 19:45:15 -0300


> ----- Mensagem original -----
> De:           Eliphas Levy Theodoro [SMTP:address@hidden]
> Enviada em:           sexta-feira, 21 de julho de 2000 18:29
> Para:         address@hidden
> Assunto:              Re: RES: [shell-script] sed ou grep?Again...
> 
> Julio Cezar Neves - DISB.O, @ 16:07:
> 
> > > De:               Renato Alvim [SMTP:address@hidden]
> 
> > > Quero localizar a linha que contem o gerenciador de janelas escolhido,
> > > descomente-a, mas terei que localizar tambem a linha que contem o
> > > atualmente em
> > > uso e comenta-la.
> > > 
> > > Num livrinho da Editora Escala, desses que vendem na banca de jornais,
> > > ha uma rapida informacao sobre o comando sed.Algo assim :
> > > sed -s/Andre/Wagner/ < arquivo.texto substituiria todas as ocorrencias
> da
> > > palavra Andre pela palavra Wagner, no arquivo.
> 
> >     Renato, não é bem assim! A expressão regular deve vir entre aspas ou
> > apóstrofos para que o shell não a interprete, e sim o sed. Mesmo q vc
> 
> não é estritamente necessário, mas recomendável. o shell vai expandir o
> que
> ele puder e você tem de estar ciente disso. mas no caso acima nada seria
> expandido, só se houvesse alguns '*' ou '?'.
> 
> > tivesse feito desta forma, vc trocaria somente a 1a. ocorrencia de Andre
> em
> > cada linha. Para globalizar a pesquisa exista o parâmetro "g". Assim,
> para
> > trocar todas as ocorrências de Andre por Wagner vc deveria fazer:
> > 
> >     sed '1,$s/Andre/Wagner/g' ArqNomes
> >     onde "1,$" significa da 1a. à última linha e é opcional e o "g" é
> > para pesquisar todas as ocorrencias de Andre em cada linha.
> 
> >     Vai ai uma definição um pouco + detalhada:
> >     sua sintaxe geral é:
> 
> pulando a descrição detalhada...
> 
> >     Suponha q o seu .xinitrc esteja assim:
> >     # exec gnome-session
> >     exec icewm
> >     # exec blackbox
> >     # exec kfm
> >     e vc queira comentar o icewm e descomentar o kfm. Então:
> >     sed 's/^exec icewm/# exec icewm/' .xinitrc | sed 's/^# exec kfm/exec
> > kfm/'
> >     onde o "^" serve somente para dizer que a pesquisa esta sendo feita
> > no início de cada linha.
> 
> eu faria um pouquinho diferente, já que não sabemos qual seria a linha que
> já estava descomentada:
> 
> cp -a .xinitrc .xinitrc.bkp                        # preserva permissões
> sed "s/^[^#]/#\0/; s/#exec $WM/exec $WM/" .xinitrc.bkp > .xinitrc
> 
        Eliphas, achei brilhante a tua solução, e por não conhecer o \0
dentro do sed fui testá-lo.
        Antes da execução, tinha o seguinte:

        # exec gnome-session
        # exec icewm
        # exec blackbox
        exec kfm

        fiz $WM=icewm e executei. Resultou:

        # exec gnome-session
        # exec icewm
        # exec blackbox
        #0xec kfm

        Acho que não consegui o reproduzir a sua solução por estar sob um
ksh em um SO SVR4. Vc poderia me dar + detalhes para q possa entender?

> note as aspas duplas no segundo item. eu gosto de usar sempre aspas
> simples,
> e quando preciso que o shell expanda uma variável, como no exemplo, uso as
> duplas. isso ajuda a saber onde não é só o sed que está agindo.
> 
> explicação das expressões regulares:
> s/    substitua
> ^[^#] algo começando (^) por algo que não seja # ([^#])
> /     por
> #\0   um # e o conteúdo acima (do não-#)
> ;     e...
> s/    substitua
> #...  a linha tal
> /     por
> ex... a linha tal
> 
> 
> mais sobre sed? address@hidden ':) :D
> 
> -- 
> >>> from conectiva import eliphas
> >>> print eliphas.commandline
> $ vi .bashrc
> >>> print eliphas.url+" - "+eliphas.uin+" "+eliphas.linuxuser
> http://www.conectiva.com.br/~eliphas - 4856656 88709
> 
> 
> ------------------------------------------------------------------------
> 0% Introductory APR!
> Instant Approval!
> Aria Visa - get yours today.
> http://click.egroups.com/1/7102/6/_/_/_/964214936/
> ------------------------------------------------------------------------
> 
> Inscrição:     address@hidden
> 
> Sair da lista: address@hidden
> 
> Banco Dados:   http://www.egroups.com/group/shell-script


reply via email to

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