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

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

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


From: Eliphas Levy Theodoro
Subject: Re: RES: RES: [shell-script] sed ou grep?Again...
Date: Fri, 21 Jul 2000 19:57:49 -0300 (BRST)

Julio Cezar Neves - DISB.O, @ 19:45:

> > 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?

o porquê do \0 não funcionar, pode ser pela versão do sed/ implementação
da arquitetura. infelizmente, o sed não é lá um programa que se mantém o
mesmo em todos os sistemas ':(

aqui uso o 3.02.80. veja de funciona com o & ao invés do \0.

veja:
$ echo este é um teste | sed 's/est/X\0X/g'
XestXe é um tXestXe

$ echo este é um teste | sed 's/est/X&X/g'
XestXe é um tXestXe

ele equivale a todo o pattern space, ou seja, tudo entre o s/ e o 1º /.

quanto à não-mudança, acho que se você mudar:

de    "s/^[^#]/#\0/; s/#exec $WM/exec $WM/"
para  "s/^[^#]/#\0/; s/# *exec $WM/exec $WM/"

irá funcionar. repare que em seu arquivo você tem um espaço (que eu
considerei opcional nesta segunda linha).


-- 
>>> from conectiva import eliphas
>>> print eliphas.commandline
$ vi .bashrc
>>> print eliphas.url+" - "+eliphas.uin+" "+eliphas.linuxuser
http://www.conectiva.com.br/~eliphas - 4856656 88709


From (no email address) Fri Jul 21 22:02:35 2000
Return-Path: <address@hidden>
Received: (qmail 12130 invoked from network); 22 Jul 2000 05:02:34 -0000
Received: from unknown (10.1.10.142) by m4.onelist.org with QMQP; 22 Jul 2000 
05:02:34 -0000
Received: from unknown (HELO burns.conectiva) (200.250.58.146) by mta1 with 
SMTP; 22 Jul 2000 05:02:33 -0000
Received: (qmail 22267 invoked from network); 22 Jul 2000 05:04:42 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 22 Jul 2000 05:04:42 -0000
Date: Sat, 22 Jul 2000 02:04:30 -0300 (BRT)
X-Sender: aurelio@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] sed ou grep?
In-Reply-To: <318B242CE32BD41192850050DA6BA9985DFFA9@WTRJO077>
Message-ID: <Pine.LNX.4.21.0007220146240.950-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
From: # aurelio marinho jargas <address@hidden>

@ 21/7, Julio Cezar Neves - DISB.O:
> > @ 20/7, Julio Cezar Neves - DISB.O:
> > > sed '/^#/d' .xinitrc > /tmp/xinitrc ; mv /tmp/xinitrc .xinitrc
> > > grep -v '^#' .xinitrc > /tmp/xinitrc ; mv /tmp/xinitrc .xinitrc
> > com este mv você perde todas as propriedades do arquivo original
> > (permissões, possíveis links) 
>       por tratar-se do .xinitrc no exemplo, não creio q isto vá ocorrer.

talvez.
na minha máquina de casa todos os usuários comuns compartilham
dos mesmos ~/.blablablarc para evitar duplicações, por exemplo o
~/.vimrc é um link para /etc/comum/vimrc e por aí vai...

de qualquer forma, a dica do mv foi ilustrativa, pois você só
percebe a diferença quando já perdeu o link/permissão...


> De qq forma esta foi uma simplificação da resposta. Creio q pude demonstrar
> o uso dos comandos solicitados.

por que simplificação? fez o que tinha que fazer. substituiu e
regravou o arquivo. a tua foi uma resposta completa.


> > > O awk foi escrito para substituir o grep e o sed, portanto, normalmente,
> > > seu uso nestes casos é + indicado.
> > você tem certeza?
> > awk, sed e grep são coisas totalmente diferentes.
> > ambos manipulam textos, mas
> > grep: procura padrões num texto
> > sed : edita um texto de maneira não interativa
> > awk : linguagem de programação, com variáveis e estruturas de
> >       fluxo, direcionada à manipulação de texto
> "... com a finalidade de englobar as funções da família grep (grep,
>  fgrep e egrep) e do sed."

englobando ou não, para cada tipo de tarefa se tem uma ferramenta
ideal. pode-se fazer a mesma tarefa com outra, mas demorará mais,
ou se terá que escrever mais código. sem dúvida, o awk é a
mais complexa das 3 por ter funções, variáveis, laços etc etc
etc, mas nem de longe isso quer dizer que ele seja melhor (ou
mais fácil) que o sed ou grep nas tarefas, depende muito. até o
cut poderia entrar nessa história.

como comparar o awk com a simplicidade de 

sed 5d      apaga a linha 5
sed 5!d     só mostra a linha 5
sed 5q      mostra as 5 primeiras linhas


tudo é relativo, já outras tarefas são muito mais fáceis no awk
que tem o conceito de separador de campos e separador de períodos
(que o sed não tem).

depende do caso...

a propósito, legal tua descrição em português do sed em outra
mensagem, ficou bem didática (apesar de eu achar que o ex não
é tão conhecido assim para fazer menções comparativas aos seus
comandos) 


-- 
s/:(/>(/×^a]×http://www.verde666.org×^[:wq



reply via email to

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