bash – 使用sed格式化IP

前端之家收集整理的这篇文章主要介绍了bash – 使用sed格式化IP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在试图找出如何使用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.实际上,您可以使用第二个替换命令来获得所需的行为.

猜你在找的Bash相关文章