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

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

Re: [shell-script] variavel no sed


From: Mauricio Vieira
Subject: Re: [shell-script] variavel no sed
Date: Mon, 16 Apr 2001 15:24:27 -0300 (BRT)

Aurelio e Julio:

 o problema do ultimo grep é que ele pode achar usuarios diferentes do que
eu procuro.
 por exemplo, tenho aqui os usuarios antonio, antonior, antoniop. por isto
o
 | cut -d : -f 1 | grep -x ${USUARIO}
depois do cat /etc/passwd é necessário.

tanto o 'sed "s/^$USUARIO//"' quanto o 'grep -qs' que voces sugeriram
detecta os 3 usuarios enquanto eu posso querer apenas o antonio. (por
exemplo, caso o antonio nao exista mas o antonior e o antoniop, o script
nao deixara incluir).

como faco pra emular o cut -d : -f 1 em sed?

[]'s

Mauricio Vieira - Ciencia da Computacao UFBA
----------------------------------------------------------------------
The connection between the language in which we think/program and the
problems and solutions we can imagine is very close.  For this reason
restricting language features with the intent of eliminating programmer
errors is at best dangerous.
                -- Bjarne Stroustrup


On Thu, 12 Apr 2001, # aurelio marinho jargas wrote:

:olá julio,
:
:vou dar uns pitacos no teu script &:)
:
:@ 11/4, Julio Neves:
:> ATENÇÃO, no momento não disponho do Linux para testar, mas eu faria assim:
:>
:> function adiciona
:> {
:> while [ $USUARIO ];do
:>         echo -n "Digite o login do usuario (8 caracteres): "
:>         read USUARIO
:> done;
:> #Tira brancos iniciais e finais e trunca para nao haver problema
:> USUARIO=`echo "$USUARIO" | sed 's/^ *//' | sed 's/ *$//' | cut -c -8`
:
:dica: vc pode separar vários comandos sed por ;
:
:    USUARIO=`echo "$USUARIO" | sed 's/^ *//;s/ *$//' | cut -c -8`
:
:mas neste caso essa "limpa" com o sed é desnecessária, pois o
:bash já faz isso pra você, se referenciar a variável SEM as aspas
:duplas:
:
:[~] A="      blablabla       "
:[~] echo $A
:blablabla
:[~] echo "$A"
:      blablabla
:
:então o trecho acima ficaria simplesmente:
:
:    USUARIO=`echo $USUARIO | cut -c -8`
:
:ops!
:[~] echo $A...
:blablabla ...
:
:ele deixa 1 espaço no final... então:
:
:    USUARIO=`echo ${USUARIO% } | cut -c -8`
:
:
:${VAR% } == a partir do final %, corte um espaço em branco
:
:
:
:> if  sed -n "s/^$USUARIO//" /etc/passwd; then
:
:aqui faltou o p depois do s///, pois a opção -n foi especificada:
:
:  if  sed -n "s/^$USUARIO//p" /etc/passwd; then
:
:
:> # Acho que neste caso o grep é melhor q o sed que que eu quero
:> # somente testar se o usuário existe ou não.
:> # Experimente:
:> if  grep "^$USUARIO" /etc/passwd > /dev/null; then
:
:o grep tem as opções -q e -s aí não precisa do >dev/null e
:2>/dev/null (Quiet, Silent)
:
:  if  grep -qs "^$USUARIO" /etc/passwd; then
:
:
:--
:s·:(·>(·×^a]×http://www.verde666.org×^[:wq


From (no email address) Mon Apr 16 11:40:50 2001
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-7_1_2); 16 Apr 2001 18:40:50 -0000
Received: (qmail 86137 invoked from network); 16 Apr 2001 18:40:50 -0000
Received: from unknown (10.1.10.142) by l9.egroups.com with QMQP; 16 Apr 2001 
18:40:50 -0000
Received: from unknown (HELO perninha.conectiva.com.br) (200.250.58.156) by 
mta3 with SMTP; 16 Apr 2001 18:40:47 -0000
Received: from burns.conectiva (burns.conectiva [10.0.0.4]) by 
perninha.conectiva.com.br (Postfix) with SMTP id 8907C16B2B for 
<address@hidden>; Mon, 16 Apr 2001 15:40:44 -0300 (EST)
Received: (qmail 20504 invoked by uid 0); 16 Apr 2001 18:39:46 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 16 Apr 2001 18:39:46 -0000
Date: Mon, 16 Apr 2001 15:47:57 -0300 (EST)
X-Sender: verde@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] variavel no sed
In-Reply-To: <address@hidden>
Message-ID: <Pine.LNX.4.21.0104161546020.912-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
X-eGroups-From: # aurelio marinho jargas <address@hidden>
From: # aurelio marinho jargas <address@hidden>

olá maurício,

@ 16/4, Mauricio Vieira:

> Aurelio e Julio:
>
>  o problema do ultimo grep é que ele pode achar usuarios diferentes do que
> eu procuro.
>  por exemplo, tenho aqui os usuarios antonio, antonior, antoniop. por isto
> o
>  | cut -d : -f 1 | grep -x ${USUARIO}
> depois do cat /etc/passwd é necessário.
>
> tanto o 'sed "s/^$USUARIO//"' quanto o 'grep -qs' que voces sugeriram
> detecta os 3 usuarios enquanto eu posso querer apenas o antonio. (por
> exemplo, caso o antonio nao exista mas o antonior e o antoniop, o script
> nao deixara incluir).

simples cara, adiciona um : depois do $USUARIO

   if grep -qs "^$USUARIO:" /etc/passwd; then



> como faco pra emular o cut -d : -f 1 em sed?

sed 's/:.*//'

ou seja, apague tudo o que vier após o primeiro dois-pontos.



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


From (no email address) Mon Apr 16 11:45:48 2001
Return-Path: <address@hidden>
X-Sender: address@hidden
X-Apparently-To: address@hidden
Received: (EGP: mail-7_1_2); 16 Apr 2001 18:45:48 -0000
Received: (qmail 8897 invoked from network); 16 Apr 2001 18:45:47 -0000
Received: from unknown (10.1.10.142) by m8.onelist.org with QMQP; 16 Apr 2001 
18:45:47 -0000
Received: from unknown (HELO perninha.conectiva.com.br) (200.250.58.156) by 
mta3 with SMTP; 16 Apr 2001 18:45:46 -0000
Received: from burns.conectiva (burns.conectiva [10.0.0.4]) by 
perninha.conectiva.com.br (Postfix) with SMTP id 0471B16B2B for 
<address@hidden>; Mon, 16 Apr 2001 15:45:43 -0300 (EST)
Received: (qmail 22397 invoked by uid 0); 16 Apr 2001 18:44:44 -0000
Received: from verde.distro.conectiva (10.0.17.77) by burns.conectiva with 
SMTP; 16 Apr 2001 18:44:44 -0000
Date: Mon, 16 Apr 2001 15:52:56 -0300 (EST)
X-Sender: verde@verde.distro.conectiva
To: address@hidden
Subject: Re: [shell-script] Troca de caixa em txt
In-Reply-To: <address@hidden>
Message-ID: <Pine.LNX.4.21.0104161548210.912-100000@verde.distro.conectiva>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: 8BIT
X-eGroups-From: # aurelio marinho jargas <address@hidden>
From: # aurelio marinho jargas <address@hidden>

olá julio,

@ 16/4, Julio Neves:
> cat ArquivoComMaiscula | A-Z a-z > ArquivoSemMaiscula

faltou um "tr" aqui não? &:)


> ou
> sed 's/[A-Z]/[a-z]/g' ArqComMaiscula > ArqSemMaiuscula

isso no sed não funciona, tem que usar o comando y e colocar
todas as alternativa na mão, assim:

sed 'y/ABCDEFGHIJ/abcdefghij/'

(não coloquei até o Z por pregüiça) &:)


> creio q a 2ª seja + rápida.

o primeiro fica mais rápido se eliminar o cat e o |

  tr A-Z a-z < ArquivoComMaiscula > ArquivoSemMaiscula


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



reply via email to

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