首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文件中Bash Hex到Dec IP转换

在文件中Bash Hex到Dec IP转换
EN

Stack Overflow用户
提问于 2021-03-31 14:48:49
回答 3查看 334关注 0票数 0

我有一个文件,它有数百行类似于此的代码:

代码语言:javascript
复制
index.=10200,intf.10200.4=eth1,vlan.10200.4=500,IP-Addr.10200.4=C0A80A78,uptime.10200.4=120days,duplex.10200.4=full,status.10200.4=up
index.=10201,intf.10201.25=eth1,vlan.10201.25=500,IP-Addr.10201.25=C0A80A79,uptime.10201.25=80days,duplex.10201.25=full,status.10201.25=up
index.=10202,intf.10202.6=eth1,vlan.10202.6=500,IP-Addr.10202.6=C0A80A80,uptime.10202.6=240days,duplex.10202.6=full,status.10202.6=up

我试图通过编辑文件来将所有十六进制IP地址转换为虚线十进制地址。我已经看到所有bash到dec ip转换器在线,但这些是输入一个值然后转换。

如何在文件中编辑合适的值?

更详细的数据集:

代码语言:javascript
复制
index.=10200,CDP-Local-Intf.10200=FastEthernet0/0/1,CDP-IP-Addr.10200.44=C0A80A78,CDP-Uptime.10200.44=Timeticks:(342342322)52days,CDP-Opposite-Intf.10200.44=FastEthernet0/1/0,CDP-VLAN.10200.44=100,CDP-Duplex.10200.44=3,CDP-Other.10200.44=00000032
index.=10201,CDP-Local-Intf.10201=FastEthernet2/0/1,CDP-IP-Addr.10201.25=C0A80A79,CDP-Uptime.10201.25=Timeticks:(342342322)52days,CDP-Opposite-Intf.10201.25=FastEthernet0/2/0,CDP-VLAN.10201.25=101,CDP-Duplex.10201.25=3,CDP-Other.10201.25=00000032
index.=10202,CDP-Local-Intf.10202=FastEthernet2/1/1,CDP-IP-Addr.10202.11=C0A80A80,CDP-Uptime.10202.11=Timeticks:(342342322)52days,CDP-Opposite-Intf.10202.11=FastEthernet0/3/0,CDP-VLAN.10202.11=101,CDP-Duplex.10202.11=3,CDP-Other.10202.11=00000032
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-01 01:39:51

如果perl是您的选择,您会尝试以下方法:

代码语言:javascript
复制
perl -i -pe 's/(CDP-IP-Addr[\d.]+=)([[:xdigit:]]{8})/$1 . join(".", unpack("C4", pack("H8", $2)))/e' datafile

  • -i选项to perl允许就地编辑。
  • -pe选项告诉perl按照sedawk的方式逐行处理输入文件。H 211H 112 regex (CDP-IP-Addr[\d.]+=)([[:xdigit:]]{8})提取子字符串"CDP-IP-Addr.xx.xx=“和以下十六进制字符串。$1$2按顺序捕获它们。
  • 函数unpack("C4", pack("H8", $2))将8位十六进制字符串$2转换为一个由四个十进制值组成的数组。
  • e切换到s/regex/replacement/运算符告诉perl将替换计算为perl表达式。h 224f 225
票数 1
EN

Stack Overflow用户

发布于 2021-03-31 14:58:06

不确定这是否有帮助,但如果您不介意使用Python使其成为快速转换,请查看我用一个非常简单的Python脚本找到的链接,它可以将十六进制转换为十进制转换。

http://pythonldap.blogspot.com/2014/09/python-script-to-convert-hexadecimal.html

如果需要转换十六进制文件,请尝试添加一个for循环来迭代十六进制值,并使用该文件作为参数。

票数 0
EN

Stack Overflow用户

发布于 2021-03-31 16:44:50

下面是gawk测试工具--它使用gawk特定的函数和扩展。

代码语言:javascript
复制
$ cat tst.awk
match($0,/.*=([[:xdigit:]]+),(CDP-Uptime|uptime).*/,a) {
  str = strtonum(sprintf("0x%s", a[1]))
  ip=sprintf ("%d.%d.%d.%d",
    rshift(and(str,0xff000000),24),
    rshift(and(str,0x00ff0000),16),
    rshift(and(str,0x0000ff00),08),
    rshift(and(str,0x000000ff),00))
  $0=substr($0,1,a[1,"start"]-1) ip substr($0,a[1,"start"]+a[1,"length"])
}
1

$ gawk -f tst.awk myFile myMoreDetailedFile
index.=10200,intf.10200.4=eth1,vlan.10200.4=500,IP-Addr.10200.4=192.168.10.120,uptime.10200.4=120days,duplex.10200.4=full,status.10200.4=up
index.=10201,intf.10201.25=eth1,vlan.10201.25=500,IP-Addr.10201.25=192.168.10.121,uptime.10201.25=80days,duplex.10201.25=full,status.10201.25=up
index.=10202,intf.10202.6=eth1,vlan.10202.6=500,IP-Addr.10202.6=192.168.10.128,uptime.10202.6=240days,duplex.10202.6=full,status.10202.6=up
index.=10200,CDP-Local-Intf.10200=FastEthernet0/0/1,CDP-IP-Addr.10200.44=192.168.10.120,CDP-Uptime.10200.44=Timeticks:(342342322)52days,CDP-Opposite-Intf.10200.44=FastEthernet0/1/0,CDP-VLAN.10200.44=100,CDP-Duplex.10200.44=3,CDP-Other.10200.44=00000032
index.=10201,CDP-Local-Intf.10201=FastEthernet2/0/1,CDP-IP-Addr.10201.25=192.168.10.121,CDP-Uptime.10201.25=Timeticks:(342342322)52days,CDP-Opposite-Intf.10201.25=FastEthernet0/2/0,CDP-VLAN.10201.25=101,CDP-Duplex.10201.25=3,CDP-Other.10201.25=00000032
index.=10202,CDP-Local-Intf.10202=FastEthernet2/1/1,CDP-IP-Addr.10202.11=192.168.10.128,CDP-Uptime.10202.11=Timeticks:(342342322)52days,CDP-Opposite-Intf.10202.11=FastEthernet0/3/0,CDP-VLAN.10202.11=101,CDP-Duplex.10202.11=3,CDP-Other.10202.11=00000032

这肯定是流线更深。让它旋转一下!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66890129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档