[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RES: [shell-script] sed ou grep?Again...
From: |
Eliphas Levy Theodoro |
Subject: |
Re: RES: [shell-script] sed ou grep?Again... |
Date: |
Fri, 21 Jul 2000 18:28:52 -0300 (BRST) |
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
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 ':)
--
>>> from conectiva import eliphas
>>> print eliphas.commandline
$ vi .bashrc
>>> print eliphas.url+" - "+eliphas.uin+" "+eliphas.linuxuser
http://www.conectiva.com.br/~eliphas - 4856656 88709