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
命令
成功。然后它尝试下一个替换。
我想得到你的帮助: 我有这些 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
命令 成功。然后它尝试下一个替换。