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: Julio C. Neves
Subject: Re: [shell-script] Duvida manipulação de String s
Date: Thu, 1 Dec 2016 12:55:12 -0200

Grande Fernando, o bc é de código está aberto e como vc é um dos melhores, que conheço, em C, é a pessoa indicada para fazer isso. Basta neste sábado, não ir a praia, nem beber chope e escrever a implementação desta opção. Aproveita a faz o mesmo nos intrínsecos let, $((...)) e $[...]. 

Um abraço do seu "Muy Amigo"
Julio ;)


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 1 de dezembro de 2016 12:24, Fernando Mercês address@hidden [shell-script] <address@hidden> escreveu:
 

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]