我正在试图找出如何使用sed来执行以下操作:
我有一个IPv4地址列表,我试图使它们在显示器上统一.所以例如:1.2.4.32将是001.002.004.032. 10.125.62.1将为010.125.062.001.
我正在尝试使用sed来做,因为这正是我正在学习的.
我得到这两个,这将采取任何一个或两个数字的数字,并在前面追加零.
sed 's/\<[0-9][0-9]\>/0&/g' file sed 's/\<[0-9]\>/00&/g' file
但是,在其他非IP地址中,我的输入文件将具有单位或双位数字.例:
host-1 1.2.3.32
所以我需要一种方法来寻找完整的IP地址,我认为可以实现这一点
sed 's/\.\<[0-9]\>/00&/g'
但是不仅如此,忽略了一些这样的情况,而且由于某种原因,它在第三个八位字节的末尾附加了00.
echo "10.10.88.5" | sed 's/\.\<[0-9]\>/00&/g' 10.10.8800.5
示例文件:
Jumpstart Server jumo 10.20.5.126 Jumpstart Server acob 10.20.5.168 NW1 H17 Node cluster 10.10.161.87 NW1 H17 Node-1 10.10.161.8 NW1 H17 Node-2 10.10.161.9 ts-nw1 10.10.8.6
$cat 37222835.txt Jumpstart Server jumo 10.20.5.126 10.29.23.24 Jumpstart Server acob 10.20.5.168 dig opt Jumpstart Server reac 251.218.212.1 rel NW1 H17 Node cluster 10.10.161.87 NW1 H17 Node-1 10.10.161.8 NW1 H17 Node-2 10.10.161.9 ts-nw1 10.10.8.6 Nw2 HW12 Node-3 192.168.0.1 cluster
做:
sed -n 's/\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\{1\}\.'\ '\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\{1\}\.'\ '\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\{1\}\.'\ '\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5] \)/00\1\.00\2\.00\3\.00\4/g; s/0\+\([0-9]\{3\}\)/\1/g;p' 37222835.txt
给出:
Jumpstart Server jumo 010.020.005.126 010.029.023.024 Jumpstart Server acob 010.020.005.168 dig opt Jumpstart Server reac 251.218.212.001 rel NW1 H17 Node cluster 010.010.161.087 NW1 H17 Node-1 010.010.161.008 NW1 H17 Node-2 010.010.161.009 ts-nw1 010.010.008.006 Nw2 HW12 Node-3 192.168.000.001 cluster
优于@ benjamin-w提到的方法
这可以替代同一行中的多个IP地址
缺点(@本杰明提到的方法补救这个)
如果有一个字,说Node-000234它会改为Node-234.实际上,您可以使用第二个替换命令来获得所需的行为.