ITよろづや

ITから生活の参考になる情報を備忘録代わりに残していきます

MACアドレステーブルへ2行毎にコロンを挿入するPowerShellコマンド 大量変換に便利

MACアドレステーブルへ2行毎にコロンを挿入するPowerShellコマンドに関する情報です。

 

大量に変換したい場合に便利です。MACアドレステーブルは記述方法に明確にこれというものがないので、機器によってコロンがあったり、なかったり、記述が異なる場合があるので、知っていると便利です。

 

参考になった情報元はこちら

scripting - Inserting Colons into a list of Mac Addresses - Stack Overflow

 

質問の抜粋です。

 

===

500を超えるMACアドレスがあり、2文字ごとにコロンを挿入する簡単な方法を見つけようとしています。
notepad ++を取得して検索を実行し、(..)の検索のように正規表現に置き換えて\ 1に置き換えることができます。

===

 

ここでかなり有益な情報がありますが、色んな方法があります。

 

こちらはエクセル関数です。500くらいならいいですが、エクセル関数は処理が重くなったりするので、大量の場合には向いていません。

===

=LEFT(A1,2)&":"&MID(A1,3,2)&":"&MID(A1,5,2)&":"&MID(A1,7,2)&":"&MID(A1,9,2)&":"&RIGHT(A1,2)

===

 

 

Linuxの方はこちら。

 

===

次のようなsedコマンドを使用できます。

sed 's/\(\w\w\)\(\w\w\)\(\w\w\)\(\w\w\)\(\w\w\)\(\w\w\)/\1:\2:\3:\4:\5:\6/g' filename
これにより、2つのグループで12文字が引き出され、中央にコロンが付いた状態で吐き出されます。s /(\ w \ w)/ \ 1:/ gのような単純なパターンを試すこともできますが、これにより、すべてのアドレスの末尾に余分なコロンが残ります。

===

 

そして、参考になったPowerShellがこちらです。1万とか平気で変換できます。

 

===

$macs = Get-Content C:\temp\MAC.txt
$output = foreach ($mac in $macs){
    $mac.insert(2,":").insert(5,":").insert(8,":").insert(11,":").insert(14,":")
}
$output | Out-File c:\temp\newmac.txt

===

 

例えば、こうなります。

 

123456789012

12:34:56:78:90:12

 

他にも応用が利くと思いますので、大量に変換したい場合に便利です。

 

エクセル関数をゼロから極める本【VLOOKUP関数編】