对于特殊情况,我设置了一个可以转换为(内部)IP 地址的域地址。
001002003004.test.com 应恢复为 1.2.3.4 IP。
我来到了以下 SED 行,但我觉得它非常笨重,可以更容易地完成! 对于一种情况,它不起作用,尽管这种情况不太可能存在,但我希望它能起作用。
我的数据:
user@linuxmachine:/home/user# cat regex.test
010005248210.test.com
172017170003.test.com
172000017003.test.com
001002003004.test.com
000000000001.test.com
091021000103.test.com
192168123254.test.com
172000000010.test.com
我的改造线:
cat regex.test | sed -r 's/([0-9]{3})/\1\./g' | sed -r "s/^0*//" | sed -r "s/\.0*/\./g" | sed -r "s/\.\.test.com//" | sed -r "s/\.\./\.0\./g"
输出:
10.5.248.210
172.17.170.3
172.0.17.3
1.2.3.4
.0..1
91.21.0.103
192.168.123.254
172.0..10
000000000001.test.com 不需要工作,因为这是一个不可能的 IP。但是 172000000010.test.com 我需要工作。
我原以为最终 SED 上的 g 标志会替换所有出现的事件……但它似乎并非如此。我可以做些什么来改善这一点?
最佳答案
我会用 gawk (>=4.0) 的 FPAT
来做:
用你的文件测试:
kent$ awk -v FPAT='.{3}' '{printf "%d.%d.%d.%d\n",$1+0,$2+0,$3+0,$4+0}' file
10.5.248.210
172.17.170.3
172.0.17.3
1.2.3.4
0.0.0.1
91.21.0.103
192.168.123.254
172.0.0.10
关于用于将 001002003004.test.com 转换为 IP 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23755714/