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

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

Re: Limpar espaços em brando e linhas em branco


From: Anderson Junior
Subject: Re: Limpar espaços em brando e linhas em branco
Date: Sun, 29 Sep 2013 04:05:58 -0000
User-agent: eGroups-EW/0.82

Obrigado novamente Julio, segui sua idéia e removi o if deixando somente [ -z 
$vtmp ] && echo $vtmp | mail -s "Radio fora do ar" email@
outra mudança que fiz foi trocar -z por -n porque na verdade o email será 
mandado quando a string não for vazia, agora esta perfeita, muito obrigado pela 
sua atenção e ajuda....

grande abraço...

Att.
Anderson Junior

--- Em address@hidden, "Julio C. Neves" <julio.neves@...> escreveu
>
> Copiei a sua solução e colei, mas esqueci de fazer as alterações
> necessárias e faltaram as famigeradas aspas.
> o correto seria:
> 
> if [ -z "$vtmp" ]; then
>     echo $vtmp | mail -s "Radio fora do ar" email@
> fi
> 
> As aspas são necessária pq, caso $vtmp esteja vazia, após o shell trocar a
> variável pelo seu valor (o que é feito antes da instrução ser executada) o
> que resutaria para execução seria:
> 
> if [ -z ]; then
>     echo $vtmp | mail -s "Radio fora do ar" email@
> fi
> 
> e então faltaria argumento para o operador unário.
> 
> Porém fiaria mais ágil se fosse:
> 
> [ -z $vtmp ] && echo $vtmp | mail -s "Radio fora do ar" email@
> 
> Abcs,
> Julio
> *@juliobash
> *
> 
>  A partir de 28/10 estarei ministrando um curso de 40 horas em Curitiba.
> Email me.
> 
> 
> Em 28 de setembro de 2013 20:24, Anderson Junior <
> andersonscinfo@...> escreveu:
> 
> > **
> >
> >
> > Obrigado pela indicação, irei ler concerteza, até comprei um livro que
> > estou esperando chegar, mas ja vou iniciar a leitura deste que me
> > indicou....paroveitando...deu um pequeno erro na linha do if, o erro foi:
> > ./newping: line 15: [: 4a5: esperado operador binário
> >
> > eu avia anteriormente tenta usar o -z, mas estava passando direto pelo if,
> > mesmo estando em branco...por isso tentei dessa outra forma, deveria ser
> > alguma coisa errada que eu avia digitado...
> >
> > Att.
> > Anderson Junior
> >
> > --- Em address@hidden, "Julio C. Neves" <julio.neves@>
> > escreveu
> > >
> > > Melhorando:
> > > Pinga=$(ping -c 3 192.168.10.3; ping -c 3 192.168.10.4; ping -c 3
> > > 192.168.10.5; ping -c 3 192.168.10.10) <192.168.10.10>
> > > cut -d' ' -s -f 4-7 <<< "$Pinga" | cut -d: -s -f 1 | sort -n -u > ipstmp
> > > # <Sem tentar entender, mas achando que pode melhorar (acho que o diff
> > > deveria ser substituído pelo comm)>
> > > vtmp=$(diff ipstmp ips)
> > >
> > > #Na hora de fazer o diff ele retorna um sinal de > aqui eu removo e fico
> > > somente com o ip que
> > > #não foi posivel pingar, assim sendo o radio que esta fora.
> > > vtmp=$(cut -d'>' -f2 <<< "$vtmp")
> > >
> > > #Remove espaços em branco ( @juliobash )
> > > vtmp=$(sed '/^ *$/d;s/^ *//;s/ *$//' <<< "$vtmp")
> > > # </Sem tentar entender, mas achando que pode melhorar (acho que o diff
> > > deveria ser substituído pelo comm)>
> > > if [ -z $vtmp ]; then
> > > echo $vtmp | mail -s "Radio fora do ar" email@
> > > fi
> > >
> > >
> > > 99% das suas dúvidas estão respondidas em
> > >
> > http://wiki.softwarelivre.org/TWikiBar/WebHome#Livro_de_Shell_em_Portugu_s
> > >
> > >
> > > Abcs,
> > > Julio
> > > *@juliobash
> > > **
> > > Em 28 de Setembro estarei dando um curso de Shell de 40 horas em
> > Curitiba.
> > > Email me
> > >
> > > *
> > >
> > >
> > >
> > > Em 28 de setembro de 2013 18:19, Anderson Junior <
> > > andersonscinfo@> escreveu:
> > >
> > > > **
> > > >
> > > >
> > > > Era isso mesmo que eu estava precisando, funcionou perfeito, muito
> > > > obrigado...estou com um probleminha no meu script, dei uma pesquisada
> > mas
> > > > não encontrei algo que pudesse me esclarecer, vou postar aqui e se
> > puder de
> > > > uma olhado, caso queira que eu abra outro tópico o farei...
> > > >
> > > > #!/bin/bash
> > > >
> > > > #Pinga nos radios e salva dentro de log.txt
> > > > ping -c 3 192.168.10.3 > log.txt
> > > > ping -c 3 192.168.10.4 >> log.txt
> > > > ping -c 3 192.168.10.5 >> log.txt
> > > > ping -c 3 192.168.10.10 >> log.txt
> > > >
> > > > #Salva no arquivo ipstmp apenas os ips sem o restante das informações
> > do
> > > > ping
> > > > #Ex: 192.168.10.3
> > > > # 192.168.10.4 assim por diante,
> > > > cat log.txt | cut -d' ' -s -f 4-7 | cut -d: -s -f 1 | sort -n -u >
> > ipstmp
> > > >
> > > > #Dentro do arquivo ips tem uma lista dos ips para comparar, aqui é
> > > > comparado
> > > > vtmp=$(diff ipstmp ips)
> > > >
> > > > #Na hora de fazer o diff ele retorna um sinal de > aqui eu removo e
> > fico
> > > > somente com o ip que
> > > > #não foi posivel pingar, assim sendo o radio que esta fora.
> > > > vtmp=$(cut -d'>' -f2 <<< "$vtmp")
> > > >
> > > > #Remove espaços em branco ( @juliobash )
> > > > vtmp=$(sed '/^ *$/d;s/^ *//;s/ *$//' <<< "$vtmp")
> > > >
> > > > #Uma variavel com valor vazio para comparar com $ vtmp
> > > > vvt=""
> > > >
> > > > #Compara, caso for diferente de vazia, envia um email com o radio que
> > esta
> > > > fora
> > > > if [ $vtmp != $vvt ]; then
> > > > echo $vtmp | mail -s "Radio fora do ar" email@
> > > > fi
> > > >
> > > > o problema esta na hora de testar se o conteudo esta vazio ou se tem
> > algum
> > > > conteudo na variavel, criticas e sugestões são bem vindas, sou
> > extremamente
> > > > iniciante....
> > > >
> > > > Este script serve para testar alguns ips e caso não conciga pingar em
> > > > algum deles envia um email com o ip que esta fora do alcance...
> > > >
> > > > Att.
> > > > Anderson Junior
> > > >
> > > > --- Em address@hidden, "Julio C. Neves" <julio.neves@
> > >
> > > > escreveu
> > > > >
> > > > > Repare essa sequencia de cmds:
> > > > >
> > > > > $ cat -vet <<< "$Var"
> > > > > 1 $
> > > > > $
> > > > > 2 $
> > > > > 3 $
> > > > > $
> > > > > 4$
> > > > > $
> > > > > 5$
> > > > > $ Var=$(sed '/^ *$/d;s/^ *//;s/ *$//' <<< "$Var")
> > > > > $ cat -vet <<< "$Var"
> > > > > 1$
> > > > > 2$
> > > > > 3$
> > > > > 4$
> > > > > 5$
> > > > >
> > > > > Usei a opção -vet do cat, para que ele exibisse o fim de linha como
> > um
> > > > > cifrão ($). Como vc pode ver, criei linhas vazias, só com espaços e
> > com
> > > > > espaços antes e/ou após o valor. No fim estava tudo limpo.
> > > > >
> > > > >
> > > > > Abcs,
> > > > > Julio
> > > > > *@juliobash
> > > > > *
> > > > >
> > > > >
> > > > >
> > > > > Em 28 de setembro de 2013 09:53, Anderson Junior <
> > > > > andersonscinfo@> escreveu:
> > > > >
> > > > > > **
> > > > > >
> > > > > >
> > > > > > Obrigado Julio deu certinho, só mais uma pergunta, teria como
> > utilizar
> > > > > > esse mesmo comando em uma variavel?
> > > > > >
> > > > > > --- Em address@hidden, "Julio C. Neves"
> > <julio.neves@
> > > > >
> > > > > > escreveu
> > > > > > >
> > > > > > > Para matar linhas vazias ou que contenham somente espaços em
> > branco:
> > > > > > > $ sed -i.veio '/^ *$/d' arq
> > > > > > >
> > > > > > > Para tirar espaços do início:
> > > > > > > $ sed -i.veio 's/^ *//' arq
> > > > > > >
> > > > > > > Para tirar espaços do fim:
> > > > > > > $ sed -i.veio 's/ *$//' arq
> > > > > > >
> > > > > > > Para fazer tudo de uma só vez:
> > > > > > > $ sed -i.veio '/^ *$/d;s/^ *//;s/ *$//' arq
> > > > > > >
> > > > > > > Obs: Com essa sintaxe, o arquivo (que chamei de arq) será
> > alterado
> > > > nele
> > > > > > > mesmo, mas criará uma cópia do original em arq.veio. Se o cmd
> > > > funcionar,
> > > > > > > então:
> > > > > > > $ rm arq.veio
> > > > > > > Senão:
> > > > > > > $ mv arq.veio arq
> > > > > > >
> > > > > > > Abcs,
> > > > > > > Julio
> > > > > > > *@juliobash
> > > > > > > *
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Em 28 de setembro de 2013 01:45, Anderson Junior <
> > > > > > > andersonscinfo@> escreveu:
> > > > > > >
> > > > > > > > **
> > > > > > > >
> > > > > > > >
> > > > > > > > Boa noite, eu tenho uma variavel com o seguinte conteudo "
> > teste
> > > > teste
> > > > > > "
> > > > > > > > nessa string tem espaços no inicio e no fim, eu programo com
> > > > > > > > freepascal/lazarus, e temos um comando/função chamada trim, eu
> > faço
> > > > > > assim
> > > > > > > >
> > > > > > > > var:=Trim(var);
> > > > > > > >
> > > > > > > > o trim pega a variavel e remove os espaços no inicio e no fim
> > da
> > > > > > > > palavra/frase, como eu faria isso em shell, de forma
> > simples....
> > > > > > > >
> > > > > > > > Outra duvida que eu tenho, é que to gerando uns arquivos de log
> > > > que as
> > > > > > > > vezes ficam com linhas em branco no fim do arquivo, ou se o log
> > > > não tem
> > > > > > > > nada, mesmo assim tem algumas linhas em branco, como
> > > > > > removelas...pensei que
> > > > > > > > algo como o trim poderia resolver isso tbm....
> > > > > > > >
> > > > > > > > Att.
> > > > > > > > Anderson Junior
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > >
> >
> >  
> >
>




reply via email to

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