Add/Replace 字符在一行的一部分

Add/Replace character in a section of a line

我想得到你的帮助: 我有这些 IPv6:

29c4:fe34:5:2087:86b8:2ff:fed1:9f24

2c0f:f4b8:1:2092:51:6ff:fe81:c600

这些部分用“:”划分,我需要从第五部分到第八部分找到少于 4 位数字的组,然后添加“0”以得到类似这样的内容:

29c4:fe34:5:2087:86b8:02ff:fed1:9f24

2c0f:f4b8:1:2092:0051:06ff:fe81:c600

我尝试过使用 sed,但没有成功...老实说,我不知道该怎么做。

非常感谢您。

请您尝试 sed 解决方案:

sed -E ':l;s/^(([^:]+:){4,})(\b[[:xdigit:]]{1,3}\b)//g;tl' inputfile

结果:

29c4:fe34:5:2087:86b8:02ff:fed1:9f24
2c0f:f4b8:1:2092:0051:06ff:fe81:c600

[说明]

  • 命令 :l 定义了要循环的标签 l
  • 正则表达式 (([^:]+:){4,}) 将匹配前四个或更多 保留它们不变的字段。
  • 下一个正则表达式 (\b[[:xdigit:]]{1,3}\b) 将匹配十六进制值 少于四位数字。
  • 然后 s 命令将通过添加前导零替换它 表达式 </code> 是 \1, "0" 和 \3.</li> 的串联 <li>最后的 <code>tl 命令分支到标签 l 如果 s 命令 成功。然后它尝试下一个替换。