MAC의 모든 바이트 앞에 0이 있도록 MAC 주소와 IP 쌍을 다시 포맷하려면 어떻게 해야 합니까?

MAC의 모든 바이트 앞에 0이 있도록 MAC 주소와 IP 쌍을 다시 포맷하려면 어떻게 해야 합니까?

다음과 같은 테이블이 있습니다.

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

A는 0항상 MAC 주소의 "별도" 문자 앞에 추가됩니다. 나는 좋은 결과를 얻지 못한 채 다음을 시도했습니다.

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

답변1

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

위의 트릭이 있어야합니다. 이 표현식을 해석하려면 다음 순서를 따르세요.

  • \([ :]\)- 대괄호는 이스케이프되어야 합니다 sed. 이는 공백이나 콜론과 일치하며 다음과 같습니다.
  • \([0-9a-f]:*\)- 16진수 뒤에 0개 이상의 콜론이 오는 경우:

다음으로 대체됩니다:

  • \1- 첫 번째 그룹(공백 또는 콜론)
  • 0- 숫자 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

관련 정보