用于将 001002003004.test.com 转换为 IP 的正则表达式

标签 regex sed

对于特殊情况,我设置了一个可以转换为(内部)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/

相关文章:

python - 这样的正则表达式哪里错了?

Python 正则表达式 - 贪婪量词并非在所有情况下都有效

c# - 如何循环遍历XML中的所有节点并根据C#中的值更改节点值?

linux - 使用通配符搜索并在同一行替换

xml - 使用 sed 替换 xml 属性

regex - 使用 SED 进行文本替换

r - 需要提取中间词以 R 中的特定词开头的整个句子

python - 使用负向后查找的多个正则表达式匹配

apache - 在带有引号和转义字符的 Alias 中使用 sed

bash - 使用 Perl、sed、awk 替换多行模式