[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