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: Julio C. Neves
Subject: 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 10:48:50 -0200

Fala Nando,
experimente fazer:

$ LC_ALL=pt_BR.UTF-8 numfmt --grouping 1234567946548,2
Deve funfar.

Vc vai palestrar no BSDday daqui do RJ?

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Conheça nosso portal educacional e estude conosco: 



Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.



Em qua, 30 de jan de 2019 às 17:18, Fernando Mercês address@hidden [shell-script] <address@hidden> escreveu:
 

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!


On Wed, Jan 30, 2019 at 3:51 PM Alfredo Casanova address@hidden [shell-script] <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 [shell-script] <address@hidden> wrote:
 

Como sempre, nessa lista, muito mais que eu esperava. :)

Muito obrigado, amigos!


On Fri, Dec 7, 2018 at 4:16 PM phfbettega address@hidden [shell-script] <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 [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 [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 [shell-script] wrote:
>> > Acabei de matar um unicórnio:
>> >
>> > $ echo 2147483647 | 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>
>> >
>> >
>> > On Fri, Dec 7, 2018 at 2:11 AM Fernando Mercês <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
>> > 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 | 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>
>> >
>> >
>> > ----------------------------------------------------------
>> > Enviado por: =?UTF-8?Q?Fernando_Merc=C3=AAs?= <address@hidden>
>> > ----------------------------------------------------------
>> > Responder através da web
>>
> --
>
>
>
> Pere
>
> 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>
> ----------------------------------------------------------
> Responder através da web


reply via email to

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