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: Separar os


From: phfbettega
Subject: Re: [shell-script] Re: [shell-script] Re: [shell-script] Re: Separar os dígitos de um número
Date: Fri, 7 Dec 2018 16:14:48 -0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.2

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]