使用 sed 在数字和单词之间插入空格

using sed to insert whitespaces between a number and word

我有一系列文件使用固定定界,而不是逗号分隔定界。它们看起来都是这样的:

2015/09/29 659027 RIH619 25 105.80IN921186
2015/09/29 659027 RIH619 25 105.80IN921186
2015/09/29 659027 RIH619 25 105.80IN921186
2015/09/29 659027 RIH619 25 105.80IN921186

我想用逗号替换所有 space。我有一段代码可以完成这个:

sed -r 's/^\s+//;s/\s+/,/g'

在 运行 代码之后我得到了这个结果:

2015/09/29,659027,RIH619,25,105.80IN921186
2015/09/29,659027,RIH619,25,105.80IN921186
2015/09/29,659027,RIH619,25,105.80IN921186
2015/09/29,659027,RIH619,25,105.80IN921186

我的问题是我得到的文件在数量和参考之间没有 space。我的输出需要如下所示:

2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186

我试过的是:

sed -r 's/^\s+//;s/\.\d\d\D+/\.\d\d,\D/;s/\s+/,/g'

但是好像什么都没做

您可以将此单个 sed 用于两者:

sed -r 's/[[:blank:]]+/,/g; s/([[:digit:]])([[:alpha:]])/,/g' file
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
2015/09/29,659027,RIH619,25,105.80,IN921186
  • ([[:digit:]]) 匹配一个数字并将其捕获到第 1 组
  • ([[:alpha:]]) 匹配一个字母表并将其捕获到第 2 组
  • , 在两个组之间放置一个逗号。

awk 支持固定字段宽度,这对这类事情很有用:

$ echo "2015/09/29 659027 RIH619 25 105.80IN921186" | 
    awk 'BEGIN { FIELDWIDTHS="10 1 6 1 6 1 2 1 6 8"; OFS="," }{ print ,,,,, }'
2015/09/29,659027,RIH619,25,105.80,IN921186

trsed

 tr ' ' ',' <file | sed -r 's/(\.[0-9]{2})/,/'