5

この形式の MAC アドレスのリストがあります。

412010000018
412010000026
412010000034

私はこの出力が欲しい:

41:20:10:00:00:18
41:20:10:00:00:26
41:20:10:00:00:34

私はこれを試しましたが、うまくいきませんでした:

sed 's/([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1:\2:\3:\4/g' mac_list

どうすればいいですか?

4

5 に答える 5

7

これはうまくいくかもしれません(GNU sed):

sed 's/..\B/&:/g' file
于 2012-06-12T12:13:24.327 に答える
5

これが私のために働いたものです

sed 's/\(..\)/\1:/g;s/:$//' file
于 2014-08-08T17:34:24.627 に答える
3

正しいsed構文を使用する必要があります。

\{I\}
     matches exactly I sequences (I is a decimal integer;
     for portability, keep it between 0 and 255 inclusive).

\(REGEXP\)
     Groups the inner REGEXP as a whole, this is used for back references.

これは、最初の2つのフィールドをカバーするコマンドの例です。

     sed 's/^\([0-9A-Fa-f]\{2\}\)\([0-9A-Fa-f]\{2\}\).*$/\1:\2:/'

次のコマンドは完全なMACアドレスを処理でき、読みやすいです。

 sed -e 's/^\([0-9A-Fa-f]\{2\}\)/\1_/'  \
     -e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
     -e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
     -e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
     -e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
     -e 's/_\([0-9A-Fa-f]\{2\}\)/:\1/'

@Qtaxによってここに投稿されたグローバル置換を使用したperlソリューションのアイデアに従うと、より短いソリューションを得ることができます。

 sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/'
于 2012-06-12T07:08:10.780 に答える
2

パールの例:

perl -pe 's/(\b|\G)[\da-f]{2}(?=[\da-f]{2})/$&:/ig' file

ファイルに MAC アドレスしかない場合は、次のように簡略化できます。

perl -pe 's/\w{2}\B/$&:/g' file
于 2012-06-12T07:12:14.567 に答える
1

awk許容できる解決策の場合:

awk 'BEGIN { FS= "" }
{ for (i=1; i<=length($0) ; i++) {
      if (i % 2 == 0) { macaddr=macaddr $i ":" } 
      else { macaddr = macaddr $i }
  }
  print gensub(":$","","g",macaddr)
  macaddr=""
}' INPUTFILE

うまくやります。ここで実際の動作を見ることができます

于 2012-06-12T07:10:55.300 に答える