使用 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
与 tr
和 sed
tr ' ' ',' <file | sed -r 's/(\.[0-9]{2})/,/'
我有一系列文件使用固定定界,而不是逗号分隔定界。它们看起来都是这样的:
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
与 tr
和 sed
tr ' ' ',' <file | sed -r 's/(\.[0-9]{2})/,/'