如何重新格式化 MAC 地址和 IP 对,确保 MAC 的每个字节都有一个前导零?

如何重新格式化 MAC 地址和 IP 对,确保 MAC 的每个字节都有一个前导零?

我有一张这样的桌子:

10.6.6.12 0:50:56:9b:a6:2

10.6.6.13 fe:9:31:b6:71:1d

我必须有这样的东西:

10.6.6.12,00:50:56:9b:a6:02

10.6.6.13,fe:09:31:b6:71:1d

A0始终添加在 MAC 地址中任何“单独”字符之前。我尝试了以下方法但结果不好:

rpl -i ":a:" ":0a:" file.txt

答案1

cat /path/to/table | sed 's/\([ :]\)\([0-9a-f]:*\)/\10\2/g'

以上应该就是窍门了。为了解释这个表达式,序列

  • \([ :]\)- 括号需要转义sed;这是空格或冒号的匹配,后跟:
  • \([0-9a-f]:*\)- 十六进制数字后跟零个或多个冒号,然后是:

将被替换为:

  • \1- 第一组(空格或冒号)
  • 0- 数字零
  • \2- 第二组(找到的单个数字和冒号(如果存在))

示例用例:

$ echo "1.2.3.4 5:3d:c:12:3" | sed 's/\([ :]\)\([0-9a-f]:*\)/\10\2/g'
1.2.3.4 05:3d:0c:12:03

答案2

脚本

#!/usr/bin/env ruby

ARGF.readlines.map do |line|
  if line =~ /^\s*$/
    puts
    next
  end 
  ip, mac = line.split /\s+/
  mac = mac.split(?:).map { |b| b.length != 2 ? ?0 << b : b }.join ?:
  puts [ip, mac].join ?,
end

结果

$ ruby /tmp/macfix.rb /tmp/corpus 
10.6.6.12,00:50:56:9b:a6:02

10.6.6.13,fe:09:31:b6:71:1d

相关内容