[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] variavel no sed
From: |
Julio Neves |
Subject: |
Re: [shell-script] variavel no sed |
Date: |
Mon, 16 Apr 2001 18:01:47 -0300 |
Não precisa fazer o cut Mauricio, basta vc agregar os dois-pontos à sua
pesquisa.
if grep \^$USUARIO: /etc/passwd > /dev/null; then ...
ou fazer a mesma coisa com o sed.
Obs:
Cuidado com o uso das opções -qs do grep. O -q é expecifico do Bash. No sh
e no ksh a opção -q te devolve erro.
[ ]s,
Julio Cezar Neves
Favor responder a address@hidden
Para: <address@hidden>
cc:
Assunto: Re: [shell-script] variavel no sed
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
Sair da lista: address@hidden
Banco Dados: http://www.egroups.com/group/shell-script
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://docs.yahoo.com/info/terms/