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

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

Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: [shell-scri


From: Alfredo Casanova
Subject: Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: Separar os dígitos de um número
Date: Thu, 31 Jan 2019 09:22:14 -0200

$ bash --version
GNU bash, version 5.0.2(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ numfmt --version
numfmt (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Assaf Gordon.


On Thu, Jan 31, 2019 at 12:24 AM Paulo address@hidden [shell-script] <address@hidden> wrote:
 

Olá Fernando, pode ser o locale?
Com pt_BR.UTF-8

numfmt --grouping 1234567
1.234.567

numfmt --grouping 123456,7
123.456,7

numfmt --grouping 123456.7
numfmt: sufixo inválido no entrada: “123456.7”

LANG=C numfmt --grouping 123456.7
123456.7

LANG=en_US numfmt --grouping 123456.7
123,456.7

Abraços Paulo

On 30/01/2019 17:15, Fernando Mercês address@hidden [shell-script] wrote:
> Oi Alfredo. Valeu a dica do numfmt. Não conhecia. Fiz uns testes rápidos mas não rolou:
>
> ~ $ numfmt --grouping 1234567946548,2
> numfmt: invalid suffix in input: ‘1234567946548,2’
>
> ~ $ numfmt --grouping 1234567946548.2
> 1234567946548.2
>
> ~ $ printf "%'.3f\n" 1234567946548,2
> -bash: printf: 1234567946548,2: invalid number
> 0.000
>
> ~ $ printf "%'.3f\n" 1234567946548.2
> 1234567946548.200
>
> ~ $ numfmt --grouping 2147483647
> 2147483647
>
> ~ $ printf "%'.3f\n" 2147483647
> 2147483647.000
>
> De qualquer forma, vou ler o manual com calma depois.
>
> Muito obrigado e um abraço!
>
> Att,
>
> Fernando Mercês <https://twitter.com/mer0x36> | menteb.in <http://menteb.in>
>
>
> On Wed, Jan 30, 2019 at 3:51 PM Alfredo Casanova address@hidden <mailto:address@hidden>
> [shell-script] <address@hidden <mailto:address@hidden>> wrote:
>
> __
>
> Sei que to bem atrasado na thread, mas já viram o comando numfmt?
>
> *numfmt --grouping 1234567946548,2*
> *1.234.567.946.548,2*
>
> ele também tem diversas outras funcionalidades, vale uma lidinha no man.
>
> Outra solução seria printf puro
>
> *printf "%'.3f\n" 1234567946548,2 *
> *1.234.567.946.548,200*
>
> ambos vão aplicar suas configurações de locale para funcionar
>
>
> On Fri, Dec 7, 2018 at 9:10 PM Fernando Mercês address@hidden <mailto:address@hidden> [shell-script]
> <address@hidden <mailto:address@hidden>> wrote:
>
> __
>
> Como sempre, nessa lista, muito mais que eu esperava. :)
>
> Muito obrigado, amigos!
>
> Att,
>
> Fernando Mercês <https://twitter.com/mer0x36> | menteb.in <http://menteb.in>
>
>
> On Fri, Dec 7, 2018 at 4:16 PM phfbettega address@hidden <mailto:address@hidden>
> [shell-script] <address@hidden <mailto:address@hidden>> wrote:
>
> __
>
> Olá T.Collons, no lugar do man sed, dê uma olhada no info sed, acho mais completo
> e mais detalhado com exemplos comentados.
>
> No sed do sourceforge:
>
> :a
> # O comando ':' cria uma marcação com o nome 'a', marca o ponto de volta para algum
> # comando de loop (b, t ou T).
>
> s/\B[0-9]\{3\}\>/ &/
> # A borda \B casa dois caracteres de palavra juntos, então essa ER casa uma palavra
> # de quatro dígitos, o primeiro é a borda \B seguida de três dígitos seguidos de
> # outra borda. Na primeira passada, o comando vai casar os três últimos dígitos no fim
> # da linha e substituir por <espaço> e os três dígitos casados.
> # Na segunda passada, pela ganância da ER, os últimos três dígitos seriam casados
> # novamente, mas aí entra em cena a \B, que só casa os três dígitos se houver outro
> # caracter de palavra antes.
> # Essa ER pode ser s/([0-9])([0-9]{3})\>/\1 \2/ mas nesse caso usando grupos.
> #
> # Não uso muito as bordas, então não sei se essa explicação está boa rs.
> # O info sed tem isso a respeito:
> '\B'
> Matches everywhere but on a word boundary; that is it matches if
> the character to the left and the character to the right are either
> both "word" characters or both "non-word" characters.
>
> $ echo "abc %-= def." | sed 's/\B/X/g'
> aXbXc X%X-X=X dXeXf.X
>
> '\>'
> Matches the end of a word.
>
> $ echo "abc %-= def." | sed 's/\>/X/g'
> abcX %-= defX.
>
> ta
> # Aqui o comando 't' confere se o comando 's' alterou o espaço padrão.
> # Se alterou, então pula para a marcação 'a'. Quando a ER falhar e não casar
> # mais nada na linha, o comando 's' não vai fazer nenhuma alteração e o
> # pulo para 'a' não será dado.
>
> Abraços Paulo
>
> sed -r ':a;/^[0-9]{,3} /q;s/[0-9]{3}($| )/ &/;ta'
> On 07/12/2018 11:55, 'T.Collons' address@hidden <mailto:address@hidden> [shell-script]
> wrote:
> > Hola a todos
> >
> >
> > Necesitaría que alguien me explicara la sintaxis de la orden de sed, con el "man sed" no
> consigo entenderlo.
> >
> > voy a explicar lo que yo entiendo.
> >
> > *:a* toma todo el conjunto de números
> >
> > *s/* comando de sed para substituir
> >
> > *\B[0-9]**\{3\} *toma solo grupos de 3 números
> >
> > *\>* no se para que sirve????
> >
> > *,& *substituirá el final del grupo de *\B[0-9]**\{3\} *por el carácter anterior al Ampersand,
> en este caso
> > una coma.
> > **
> >
> > *ta *Entiendo que la *a* se refiere al grupo de todos los números, pero la *t* no entiendo
> porque se usa.
> >
> >
> > Gracias de antemano por la explicación
> >
> >
> >
> > **
> >
> > El 7/12/18 a les 5:57, phfbettega address@hidden <mailto:address@hidden>
> [shell-script] ha escrit:
> >>
> >> rev é uma mão na roda :)
> >>
> >> Tem um sed que faz isso
> >>
> >> gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'
> >>
> >> http://sed.sourceforge.net/sed1line.txt
> >>
> >> Abraços Paulo
> >>
> >> On 07/12/2018 02:17, Fernando Mercês address@hidden <mailto:address@hidden>
> [shell-script] wrote:
> >> > Acabei de matar um unicórnio:
> >> >
> >> > $ echo 2147483647 <tel:(21)%204748-3647> | rev | sed 's/.../& /g' | rev
> >> > 2 147 483 647
> >> >
> >> > Algo menos deselegante? 😁
> >> >
> >> > Att,
> >> >
> >> > Fernando Mercês <https://twitter.com/mer0x36> | menteb.in <http://menteb.in> <http://menteb.in>
> >> >
> >> >
> >> > On Fri, Dec 7, 2018 at 2:11 AM Fernando Mercês <address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>> wrote:
> >> >
> >> > Oi pessoal!
> >> >
> >> > Hoje tava checando uma falha que saiu no PolicyKit [1] (aliás, atualizem seus sistemas ;-))
> e pintou a
> >> > dúvida de como fazer um número ser organizado com espaços para melhor compreensão. Tipo:
> >> >
> >> > Entrada: 2147483647 <tel:(21)%204748-3647>
> >> > Saída: 2 147 483 647
> >> >
> >> > Basicamente seria dizer que a cada três dígitos, de trás para frente, seja colocado um espaço.
> >> >
> >> > Eu consigo fazer na ordem direta com o sed:
> >> >
> >> > $ echo 2147483647 <tel:(21)%204748-3647> | sed 's/.../& /g'
> >> > 214 748 364 7
> >> >
> >> > Alguma ideia de como conseguir isso "de trás pra frente" de forma rápida?
> >> >
> >> > Abraços!
> >> >
> >> > [1] https://thehackernews.com/2018/12/linux-user-privilege-policykit.html
> >> >
> >> > Att,
> >> >
> >> > Fernando Mercês <https://twitter.com/mer0x36> | menteb.in <http://menteb.in> <http://menteb.in>
> >> >
> >> >
> >> > ----------------------------------------------------------
> >> > Enviado por: =?UTF-8?Q?Fernando_Merc=C3=AAs?= <address@hidden <mailto:address@hidden>>
> >> > ----------------------------------------------------------
> >> > Responder através da web
> >>
> > --
> >
> >
> >
> > Pere
> >
> > address@hidden <mailto:address@hidden> <mailto:address@hidden
> <mailto:address@hidden>>
> >
> >
> >
> > <https://www.google.com/>
> >
> > ------------------------------------
> >
> > 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.
> >
> >
> >
> >
> > ----------------------------------------------------------
> > Enviado por: "T.Collons" <address@hidden <mailto:address@hidden>>
> > ----------------------------------------------------------
> > Responder através da web
>
>
> ----------------------------------------------------------
> Enviado por: =?UTF-8?Q?Fernando_Merc=C3=AAs?= <address@hidden>
> ----------------------------------------------------------
> Responder através da web



--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619

reply via email to

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