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

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

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


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


> ----- Mensagem original -----
> De:           Renato Alvim [SMTP:address@hidden]
> Enviada em:           sexta-feira, 21 de julho de 2000 14:25
> Para:         address@hidden
> Assunto:              Re: [shell-script] sed ou grep?Again...
> 
> Agradeco a valiosa informacao, amigos.
> 
> Bem, meu Ingles da para ler manuais confortavelmente.As vezes vou la na
> Matriz
> tocar ou gravar, e me viro de um jeito ou de outro...
> Talvez ajude o fato de que embora seja musico, fui matematico e professor
> por 15
> anos.
> 
        Vou te fazer uma pergunta totalmente off-topic! Eu tb tenho formação
matemática e, talvez por isso, conheço diversos excelentes músicos com esta
base acadêmica (Jorge San Martin MSc- ex Garganta Profunda, João Candido
Portinari PhD...). Existe alguma relação íntima entre a música e a
matemática? mailto:address@hidden

> Bem, mas esclarecendo melhor o que quero fazer no bash.
> Um gerenciador de logins graficos, bem simples.
> 
> Suponhamos que eu tenha um .xinitrc com varias possibilidades comentadas :
> # exec gnome-session
> # exec icewm
> # exec blackbox
> # exec kfm
> etc.
> 
> 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
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 é:

        sed expressão regular [arquivo]

Onde expressão regular nada mais é senão uma das expressões regulares do ed
como as vistas acima, que obedecem ao seguinte formato geral:
        [<endereço-1>, [<endereço-2>]] <função> [argumento]

Onde <endereço-1>, <endereço-2> definem o escopo de abrangência do comando.
Se ambos forem omitidos, a interação será sobre todas as linhas do arquivo
especificado. Se somente um for eleito, o comando só atuará sobre a linha
referida 
Se nenhum arquivo for especificado, é assumida a entrada padrão.
As funções são várias e semelhantes ao editor ed, como veremos a seguir:
Função substitui: s
Função imprime (print): p
Função deleta linha: d
Função acrescenta: a
Função insere: i
Função troca: c (change)
Função finaliza: q (quit) 
> Para testar o comando, eu havia tentado :
> sed s/blackbox/icewm < .xinitrc, mas deu erro de sintaxe!
> 
        Então experimente:
> sed 's/blackbox/icewm/' < .xinitrc
        Tirando o redirecionamento fica melhor ainda:
        sed 's/blackbox/icewm/'  .xinitrc


> O que desejo e saber como fazer a substituicao, a sintaxe, no sed ou no
> grep.
> Ai, me viro na programacao, que me parece ser simples.
> 
        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.

        Espero ter quebrado o galho.
        Julio


> []'s
> Renato Alvim
> 
> ----- Original Message -----
> From: Julio Cezar Neves - DISB.O <address@hidden>
> To: <address@hidden>
> Sent: Thursday, July 20, 2000 4:23 PM
> Subject: RES: [shell-script] sed ou grep?
> 
> 
> :
> : > ----- Mensagem original -----
> : > De: Renato Alvim [SMTP:address@hidden]
> : > Enviada em: quinta-feira, 20 de julho de 2000 15:34
> : > Para: address@hidden
> : > Assunto: Re: [shell-script] sed ou grep?
> : >
> : > Muitissimo obrigado!
> : > Ser-me-a de grande valia sua ajuda.
> : > Mas, incomodando de novo, nunca usei o awk.
> : > Como ele funciona?
> : >
> : Agora não ser-te-ei (se usar mais um destes, sentir-me-ei o rei da
> : mesóclise ;)) de tão grande valia, já que o awk por ser uma linguagem
> : interpretada, bastante parecida com o C, necessita de muito tempo e
> espaço
> : para explicá-la. Caberia até abrir uma outra lista só para o tema
> : "programação em awk".
> :
> : Mas, já te adiantando, seria algo mais ou menos assim: o awk está
> : para o C, assim como o JavaScript está para o Java.
> :
> : > Posso usar o man awk?(Vou tentar).
> : >
> : Pode sim Renato, mas se a tua leitura de Inglês é boa, aconselho-te
> : a participar das listas de discussões sobre o awk que abundam (ops!) na
> : rede, ou esperar na 1ª quinzena de agosto um livro da Editora Bras... :)
> :
> : > []'s
> : > Renato Alvim
> : >
> : Abraços tb,
> : Julio
> : > ----- Original Message -----
> : > From: Julio Cezar Neves - DISB.O
> <address@hidden>
> : > To: <address@hidden>
> : > Sent: Thursday, July 20, 2000 1:27 PM
> : > Subject: RES: [shell-script] sed ou grep?
> : >
> : >
> : > : Vc pode fazer isso por sed, grep (com a opção -v) ou
> preferencialmente
> : > por
> : > : awk. Basta ter uma característica que seja única na linha que vc
> deseja
> : > : deletar e montar uma expressão regular. P.ex. digamos q vc queira
> : > deletar
> : > : todas as linhas começadas por um comentário (#) do .xinitrc. Usando
> o
> : > grep e
> : > : o sed, como vc sugeriu, ficaria:
> : > :
> : > : sed '/^#/d' .xinitrc > /tmp/xinitrc ; mv /tmp/xinitrc .xinitrc
> : > : ou
> : > : grep -v '^#' .xinitrc > /tmp/xinitrc ; mv /tmp/xinitrc .xinitrc
> : > :
> : > : O awk foi escrito para substituir o grep e o sed, portanto,
> normalmente,
> : > seu
> : > : uso nestes casos é + indicado.
> : > :
> : > : []s,
> : > : Julio
> : > :
> : >
> :
> : ------------------------------------------------------------------------
> : Make new friends, find the old at Classmates.com:
> : http://click.egroups.com/1/7075/6/_/_/_/964120792/
> : ------------------------------------------------------------------------
> :
> : Inscrição:     address@hidden
> :
> : Sair da lista: address@hidden
> :
> : Banco Dados:   http://www.egroups.com/group/shell-script
> :
> 
> 
> ------------------------------------------------------------------------
> Need a credit card?
> Instant Approval and 0% intro APR with Aria!
> http://click.egroups.com/1/7101/6/_/_/_/964200021/
> ------------------------------------------------------------------------
> 
> 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]