regex – bash:oneliner将输出中的十六进制数转换为小数
发布时间:2020-12-16 01:49:54 所属栏目:安全 来源:网络整理
导读:有没有人知道一个oneliner,一些输出可以在bash中输入,匹配和转换所有出现的十六进制数字,并保持所有其他文本不变? 也许匹配相当任意的输出,可能是十六进制 应以某种方式通过正则表达式转换,即 /(0X)?[0-9A-FA-F] {5,} / 前导0x不是必需的,但是 也要妥善处
有没有人知道一个oneliner,一些输出可以在bash中输入,匹配和转换所有出现的十六进制数字,并保持所有其他文本不变?
>也许匹配相当任意的输出,可能是十六进制 它应该在输出上工作,如: 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 stackoverflow上的大多数其他问题仅解决了如何在数字系统之间转换单个数字的问题,仅针对指定列进行转换或完全终止输入中存在的格式. 期望的输出应该如下所示:(列-t无论如何,它实际上只需要替换它可以找到的十六进制值,并且向printf语句添加前导零也不是问题) 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 在过去的两个小时里,我无法通过sed / awk / perl找到一个简短可行/可靠的解决方案,所以我来到这里寻求帮助. 解决方法
perl使用e标志替换
perl -pe 's/(0x)?[0-9a-f]{5,}/hex $&/ge' file | column -t (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |