将前导 0 添加到 bash 中的 mac 地址
Add leading 0 to mac address in bash
我正在 bash 上编写脚本以从一组设备中读取 MAC 地址,但我被一个开关卡住了 returns 地址不带前导 0。对于实例:
0:A:B:11:22:C -> 那就是 -> 00:0A:0B:11:22:0C
正则表达式是否可以添加这些前导零?我可以分别获取每个地址,获取其字节并进行调整,但我想知道是否有更简单的方法。
你可以使用 sed。 \b
单词字符和非单词字符之间的匹配。因此 \b\(\w\)\b
捕获具有单个单词字符的子字符串。
sed 's/\b\(\w\)\b/0/g' file
示例:
$ echo '0:A:B:11:22:C' | sed 's/\b\(\w\)\b/0/g'
00:0A:0B:11:22:0C
下面是使用 read
和 printf
内置函数在 BASH 中执行此操作的方法:
s='0:A:B:11:22:C'
IFS=: read -ra arr <<< "$s"
printf -v str "%02s:" "${arr[@]}"
echo "${str%:}"
00:0A:0B:11:22:0C
我正在 bash 上编写脚本以从一组设备中读取 MAC 地址,但我被一个开关卡住了 returns 地址不带前导 0。对于实例:
0:A:B:11:22:C -> 那就是 -> 00:0A:0B:11:22:0C
正则表达式是否可以添加这些前导零?我可以分别获取每个地址,获取其字节并进行调整,但我想知道是否有更简单的方法。
你可以使用 sed。 \b
单词字符和非单词字符之间的匹配。因此 \b\(\w\)\b
捕获具有单个单词字符的子字符串。
sed 's/\b\(\w\)\b/0/g' file
示例:
$ echo '0:A:B:11:22:C' | sed 's/\b\(\w\)\b/0/g'
00:0A:0B:11:22:0C
下面是使用 read
和 printf
内置函数在 BASH 中执行此操作的方法:
s='0:A:B:11:22:C'
IFS=: read -ra arr <<< "$s"
printf -v str "%02s:" "${arr[@]}"
echo "${str%:}"
00:0A:0B:11:22:0C