我有這種格式的MAC地址列表中插入冒號:的sed在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
我應該怎麼做?
我有這種格式的MAC地址列表中插入冒號:的sed在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
我應該怎麼做?
必須使用正確的sed
語法:
這裏是覆蓋第一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/'
繼perl解決方案的想法離子張貼在這裏通過@Qtax全球替換一個可以得到一個更短的解決方案:
sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\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
Perl的例子:
perl -pe 's/(\b|\G)[\da-f]{2}(?=[\da-f]{2})/$&:/ig' file
如果文件只有MAC地址,它可以簡化爲:
perl -pe 's/\w{2}\B/$&:/g' file
這可能會爲你工作(GNU SED):
sed 's/..\B/&:/g' file
這也適用於sed的busybox版本。 –
以下是我的工作
sed 's/\(..\)/\1:/g;s/:$//' file
非常適合我,謝謝! –
mac地址是十六進制格式,不僅數字。 – Yohann
一旦我開始使用基本數字格式,我還可以添加字母表正則表達式 – cppcoder