我有一个报告输出到linux中的文本文件,我需要修改一下。
如果您捕获它,文件就会像这样开始:
6 E8 B7 48 36 8C AE
8 00 0C 85 F2 F9 07
8 44 03 A7 C0 0D 26
8 C8 4C 75 5C B1 55
10 00 05 00 E7 5B 9F
10 00 17 C5 69 49 A1
10 00 1D A2 E7 BC F1
12 00 16 9C 6C 53 C0
14 00 0C 85 F2 F9 08
26 00 05 00 E7 5B B7
这里还会有一些随机文字......
我希望它看起来像这样:
6 E8:B7:48:36:8C:AE
8 00:0C:85:F2:F9:07
8 44:03:A7:C0:0D:26
8 C8:4C:75:5C:B1:55
10 00:05:00:E7:5B:9F
10 00:17:C5:69:49:A1
10 00:1D:A2:E7:BC:F1
12 00:16:9C:6C:53:C0
14 00:0C:85:F2:F9:08
26 00:05:00:E7:5B:B7
这里还会有一些随机文字......
我希望用sed来实现这一目标。
答案 0 :(得分:3)
我认为使用awk会更容易:
awk '{ printf("%2.2s %s:%s:%s:%s:%s:%s\n", $1, $2, $3, $4, $5, $6, $7); }' file
答案 1 :(得分:3)
根据@Guru的回答,您可以使用sed
:
sed -r 's/(\w) +/\1:/2g' file
在sed
不支持lookbehind之前,你必须抓住一个字母。
答案 2 :(得分:0)
使用Perl,这将适用于任意数量的对齐空间:
perl -lane '($p,$m)=/^(\s*\d+\s*)(.*)$/; $m =~ s/ /:/g; print $p,$m' input
答案 3 :(得分:0)
使用sed的一种方法:
sed 's/ */:/3g' file
答案 4 :(得分:0)
sed "
: doublept
s/^\( *[[:digit:]]\{1,\}\)\( \{1,\}\)\(.*\) \([[:alnum:]]\{1,\}\)/\1\2\3:\4/
t doublept
"
也可以使用更大的“mac地址”(我认为主要是针对IP地址和IPv6的同类问题)
答案 5 :(得分:0)
如果您始终知道数字的行范围,可以使用: -
sed 1,10s'/ /:/'g
单引号很重要。