Est-ce que quelqu'un connaît un oneliner dans lequel une sortie peut être transmise en bash
, pour faire correspondre et convertir toutes les occurrences de nombres hexadécimaux et laisser tous les autres textes intacts?bash: oneliner pour convertir les nombres hexadécimaux en nombres décimaux
- correspondent peut-être la production plutôt arbitraire qui pourrait être un hexadécimal est en quelque sorte converti par une expression rationnelle, à savoir
/(0x)?[0-9a-fA-F]{5,}/
- un des principaux
0x
ne doit pas être neccessary, mais également être manipulé correctement - il peut y avoir faux-positifs, sinon spécifiant une longueur minimale des nombres, mais cela ne devrait pas être un numéro
- le but est de trouver une solution qui peut être utilisée avec ette sorties possibles ayant des nombres hexadécimaux dans les
Il devrait fonctionner sur la production comme:
ssg sjas # cat /proc/net/stat/arp_cache | column -t
entries allocs destroys hash_grows lookups hits res_failed rcv_probes_mcast rcv_probes_ucast periodic_gc_runs forced_gc_runs unresolved_discards table_fulls
0000000d 00000006 00000004 00000000 0000c3b9 0000c35e 00000000 00000000 00000000 0000965b 00000000 00000000 00000000
0000000d 0000000d 00000004 00000001 00000000 00000000 00000000 00000000 00000000 000007cd 00000000 00000000 00000000
0000000d 00000008 00000008 00000001 00000000 00000000 00000000 00000000 00000000 000006e0 00000000 00000000 00000000
0000000d 0000000a 00000008 00000000 00000000 00000000 00000002 00000000 00000000 00000704 00000000 00000000 00000000
La plupart des autres questions sur StackOverflow ne s'attaquer à la question de savoir comment convertir des nombres simples entre les systèmes numériques, seulement faire la conversion pour une colonne spécifiée ou complètement tuer le formatage étant présent dans l'entrée.
sortie désiré devrait ressembler à: (column -t
est là de toute façon, il a vraiment juste besoin de remplacer les valeurs hexa qu'il peut trouver, et en ajoutant des zéros à une instruction printf est pas non plus un problème)
ssg sjas # cat /proc/net/stat/arp_cache | perl -pe 's/(?:0x)?[0-9a-f]{5,}/hex($&)/ge' | column -t
entries allocs destroys hash_grows lookups hits res_failed rcv_probes_mcast rcv_probes_ucast periodic_gc_runs forced_gc_runs unresolved_discards table_fulls
13 6 4 0 50105 50014 0 0 0 38491 0 0 0
13 13 4 1 0 0 0 0 0 1997 0 0 0
13 8 8 1 0 0 0 0 0 1760 0 0 0
13 10 8 0 0 0 2 0 0 1796 0 0 0
Je n'ai pas pu trouver une solution viable/fiable via sed
/awk
/perl
dans les deux dernières heures, alors je suis venu ici pour obtenir de l'aide.
S'il vous plaît ajouter votre sortie désirée pour cet exemple d'entrée à votre question. – Cyrus
@Cyrus a fait cela. – sjas
La sortie désirée ne correspond pas à l'entrée, pourquoi '0000c1c5' est-il converti en' 0'? – 123