用文本文件中的冒号替换特定空格

时间:2013-11-04 07:47:36

标签: linux sed removing-whitespace

我有一个报告输出到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来实现这一目标。

6 个答案:

答案 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

单引号很重要。