sed在mac地址中插入冒号

cpp*_*der 5 regex sed

我有这种格式的mac地址列表:

412010000018
412010000026
412010000034
Run Code Online (Sandbox Code Playgroud)

我想要这个输出:

41:20:10:00:00:18
41:20:10:00:00:26
41:20:10:00:00:34
Run Code Online (Sandbox Code Playgroud)

我试过这个,但没有用:

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

我该怎么办?

pot*_*ong 6

这可能适合你(GNU sed):

sed 's/..\B/&:/g' file
Run Code Online (Sandbox Code Playgroud)


gee*_*nit 5

这对我有用

sed 's/\(..\)/\1:/g;s/:$//' file
Run Code Online (Sandbox Code Playgroud)


Dmi*_*rov 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.
Run Code Online (Sandbox Code Playgroud)

以下是涵盖前 2 个字段的示例命令

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

以下命令可以处理完整的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/'
Run Code Online (Sandbox Code Playgroud)

遵循 @Qtax 在此发布的 perl 解决方案的想法并进行全局替换,可以得到一个更短的解决方案:

 sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/'
Run Code Online (Sandbox Code Playgroud)