bash - 文件中的 Bash Hex 到 Dec IP 转换
问题描述
我有一个文件,其中有数百行看起来与此类似:
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 hex to dec ip 转换器,但这些都是用于输入一个值然后转换的。
我将如何去编辑文件中的值?
更详细的数据集:
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
解决方案
如果perl
是您的选择,您会尝试以下方法:
perl -i -pe 's/(CDP-IP-Addr[\d.]+=)([[:xdigit:]]{8})/$1 . join(".", unpack("C4", pack("H8", $2)))/e' datafile
- 启用就地编辑的
-i
选项。perl
- 该选项告诉 perl 像或那样
-pe
逐行处理输入文件 。sed
awk
- 正则表达式
(CDP-IP-Addr[\d.]+=)([[:xdigit:]]{8})
提取子字符串“CDP-IP-Addr.xx.xx=”和以下十六进制字符串。它们被按$1
顺序捕获$2
。 - 该函数
unpack("C4", pack("H8", $2))
将 8 位十六进制字符串$2
转换为包含四个十进制值的数组。 e
切换到运算符告诉 perl将s/regex/replacement/
替换作为 perl 表达式进行计算。
推荐阅读
- python - mysql - 修复错误“TypeError: 'long' object is not iterable”
- azure - 是否有一种自动方法可以在关联任务完成时从 Azure Batch 池中删除节点?
- delphi - 基于INDY的Delphi SSL MITM Proxy - 内容加载问题
- python - 怎么能每隔一段时间发送文件?
- javascript - 如何使用代码而不是按钮单击弹出javascript模式
- javascript - 如何实现这个 svg 动画?
- javascript - 在wordpress中单击一个后禁用多个recaptchas
- polymer - Polymer 和 LitElement 共存
- typescript - 基于接口实现类方法
- android - 我的导航视图未显示我的菜单项