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:09:58 -0000
User-agent: eGroups-EW/0.82


--- Em address@hidden, Robson Alexandre <alexandrerobson@...> escreveu
>
> Anderson,
> Tem um detalhe em shell que corresponde a função Trim que seria apresentar
> a variavel sem aspas p.e.
> 
> definindo var com vários espaços antes, entre e no final da string
> $ var="       laskjda       kjdkajda         "
> 
> Apresentando var entre aspas como foi definida
> $ echo "$var" | cat -vet
>        laskjda       kjdkajda         $
> 
> Apresentando var sem aspas reduzindo os espaços com a função Trim
> $ echo $var | cat -vet
> laskjda kjdkajda$
> 
> Acredito que mais simples que isso não há.

Realmente muito simples...vou testar, nem me ocorreu que isso seria 
possivel....obrigado...

 
> Atenciosamente
> 
> Robson Alexandre
> 
> 
> Em 28 de setembro de 2013 21:39, 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]