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

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

Re: [shell-script] Re: Limpar espaços em brando e linhas em branco


From: Roger Pereira Boff
Subject: Re: [shell-script] Re: Limpar espaços em brando e linhas em branco
Date: Sun, 29 Sep 2013 00:17:58 -0300

Robson,

O problema de usar sem as aspas ela não elimina só os espaços do início e do fim, mas limpa os espaços duplicados do meio também. Caso eles não importem, seria uma solução.

Abraços.

Em 28/09/2013 23:40, "Robson Alexandre" <address@hidden> 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á.

Atenciosamente

Robson Alexandre


Em 28 de setembro de 2013 21:39, Julio C. Neves <address@hidden> 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 <address@hidden> 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]