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

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

Re: [shell-script] Duvida manipulação de String s


From: Gmail
Subject: Re: [shell-script] Duvida manipulação de String s
Date: Thu, 1 Dec 2016 21:27:22 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0

Boa tarde


Caro Fernando, adicionar à sua solução, não é necessário modificar bc

echo 4244434353314 | sed -e 's/./&+/g;s/[+]*$//' | bc

44


Salutacións

Pere

address@hidden




------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges d'empresa i altre informació confidencial tutelada per les lleis de Europea i altres estats, Si Vostè el rep per error o sense ser una de les persones esmenades a la capçalera, haurà de destruir-lo sense copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el contingut del missatge i notificar-ho per correu electrònic a l'emissor del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat podran ésser perseguides davant dels Tribunals de Justícia sota l'empar de la legislació civil, penal i administrativa nacional i internacional.  

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other confidential information protected under the laws of and other territories. if you are not one of the intended recipients of the message, you are legally obliged to delete the message content. Furthermore, you are kindly requested to report immediately the incident to the sender.

Breach of confidentiality duties is a serious criminal offence in and other territories. Offenders shall be legally prosecuted worldwide. 

Thank you for your cooperation.



El 01/12/16 a les 15:24, Fernando Mercês address@hidden [shell-script] ha escrit:
 
Ah, se o bc tivesse uma opção pra concatenar um zero no final da entrada que receber hein... Já pensou que lindo?

$ echo 4244434353314 | sed 's/./&+/g' | bc --add-trailing-zero
44




Att,

@MercesFernando
mentebinaria.com.br
---------------------------

2016-12-01 11:06 GMT-02:00 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br>:
 
Rodrigo, vou tentar te explicar:
$ echo $[$(echo 4244434353314 | sed -r 's/(.)/\1+/g')0]

O shell tem um interpretador aritmético que vc chama com $((...)), ou $[...], ou com o cmd let. Neste caso, mandei fazer a operação do que estava dentro de $[$(echo 4244434353314 | sed -r 's/(.)/\1+/g')0].

O $(...) dá prioridade de execução para o que está no seu interior, ou seja antes de qq coisa resolverá echo 4244434353314 | sed -r 's/(.)/\1+/g'.

O sed guarda o texto entre parênteses para uso futuro, só que o cmd s do sed serve para substituir a expressão regular que esrtá dentro do 1o. para de barras(/) pelo texto que está no segundo. Como o ponto (.) casa com qq caractere, o que ele fez foi guardar o 1o. caractere pq está entre parênteses e substituí-lo por ele mesmo seguido de um mais (\1+) e o g (global) no final, diz para vc aplicar esta regexp enquanto for possível, isto é para todos os algarismos do número. Veja o que este sed gera:

$ echo 4244434353314 | sed -r 's/(.)/\1+/g'
4+2+4+4+4+3+4+3+5+3+3+1+4+

O zero colocado ao final é para preencher de forma devida essa equação de forma a não dar erro de execução na operação aritmética.

$ echo $(echo 4244434353314 | sed -r 's/(.)/\1+/g')0
4+2+4+4+4+3+4+3+5+3+3+1+4+0

Espero que agora vc possa entender.

Na próxima 2a. feira (dia 5/12) começo um curso de Shell, na 4Linux (SP), com duração de 40 horas onde ensino isso e muito mais. Veja os dados abaixo da minha assinatura.

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.

Em 29 de novembro de 2016 13:58, Rodrigo Cunha address@hidden [shell-script] <address@hidden.br> escreveu:
 
srs...consegui resolver o problema com a pipeline do Julio Neves.
echo $[$(echo 4244434353314 | sed -r 's/(.)/\1+/g')0] ;

Vou ter que estudar o que esse sed faz, até ontém eu só utilizava o sed para substituir caracteres, soma eu nunca tinha feito.
Mais um ponto para o Shell.

O script que eu fiz e precisava dessa solução servia para substituir, se houvessem em um texto, as vogais das 5 primeiras palavras de cada linha por numeros(a=1,e=2.i=3,o=4,u=5) e somar os numeros das vogais de cada linha.
Meu script ficou meio feio, vou analisa-lo e posto aqui depois, pode ajudar alguém.
Abs a todos!

Em 28 de novembro de 2016 08:59, 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br> escreveu:
 
Eu não sei se já postei isso, mas de qq forma, com sed tb dá um bom caldo:

$ echo $[$(echo 4244434353314 | sed -r 's/(.)/\1+/g')0]
44

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.

Em 27 de novembro de 2016 21:32, Luiz Alberto address@hidden [shell-script] <address@hidden.br> escreveu:
 

On 27-11-2016 21:21, address@hidden [shell-script] wrote:
 

Na mesma linha da solução do Luiz Alberto, poderia ser também:

echo 4244434353314 | gawk -F "" '{ while (++i<NF) printf $i "+"; print $i }'| bc -l

[]'s
Itamar

Muito boa a tua solução Itamar !!!

Luiz A Monteiro





--
Atenciosamente,
Rodrigo da Silva Cunha
São Gonçalo, RJ - Brasil





reply via email to

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