首页 > 解决方案 > 有没有办法在 bash/sh 脚本中格式化字符串中子字符串的宽度?

问题描述

我必须使用 bash 脚本格式化字符串中子字符串的宽度,但不使用标记或循环。两个冒号之间的单个字符应在前面加上 0,以匹配每个字段的标准宽度 2。

例如

从:

6:0:36:35:30:30:72:6c:73:0:c:52:4c:30:31:30:31:30:30:30:31:36:39:0:1:3

06:00:36:35:30:30:72:6c:73:00:0c:52:4c:30:31:30:31:30:30:30:31:36:39:00:01:03

我怎样才能做到这一点?

标签: bashshell

解决方案


sed -r 's/\<([0-9a-f])\>/0\1/g'

搜索并用正则表达式替换。使用\<and\>匹配单词边界,因此[0-9a-f]只匹配单个数字。

$ sed -r 's/\<([0-9a-f])\>/0\1/g' <<< "6:0:36:35:30:30:72:6c:73:0:c:52:4c:30:31:30:31:30:30:30:31:36:39:0:1:3"
06:00:36:35:30:30:72:6c:73:00:0c:52:4c:30:31:30:31:30:30:30:31:36:39:00:01:03

推荐阅读