다음과 같은 테이블이 있습니다.
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