【发布时间】:2017-11-05 10:12:39
【问题描述】:
有谁知道可以将某些输出通过管道输入到bash 中的单行器,以匹配和转换所有出现的十六进制数字并保持所有其他文本不变?
- 可能匹配相当任意的输出,可能是十六进制
应通过正则表达式以某种方式转换,即
/(0x)?[0-9a-fA-F]{5,}/ - 前导
0x不是必需的,但是 也要妥善处理 - 可能存在误报,如果不是 指定数字的最小长度,但这不应该是 问题
- 我们的目标是找到可用于尽可能多的包含十六进制数字的输出的解决方案
它应该适用于如下输出:
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 上的大多数其他问题仅解决如何在数字系统之间转换单个数字的问题,仅针对指定列进行转换或完全取消输入中存在的格式。
所需的输出应如下所示:(column -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 找到可行/可靠的解决方案,所以我来这里寻求帮助。
【问题讨论】:
-
请将该示例输入的所需输出添加到您的问题中。
-
想要的输出和输入不匹配,为什么
0000c1c5转换成0?
标签: regex bash hex decimal converter