需要在按下2个序列逗号之间插入' n',如下所示:
"abc,,,,5,,,3.2,,"
to:
"abc,N,N,N,5,N,N,3.2,N,"
另外,后果逗号的数量不是固定的,也许是6、7或更多。需要一种灵活的方法来处理它。
找不到Google的明确解决方案。
您只需使用以下sed
命令:
sed 's/,,/,\N,/g;s/,,/,\N,/g;'
演示:
$ echo 'abc,,,,5,,,3.2,,' | sed 's/,,/,\N,/g;s/,,/,\N,/g;s/,,/,\N,/g'
abc,N,N,N,5,N,N,3.2,N,
说明:
s/,,/,\N,/g
将在字符串上全球替换,,
替换CC_3,但是您将在模式空间上进行两次通过,以确保所有替换都发生了,请给出命令:s/,,/,\N,/g;s/,,/,\N,/g;
。
其他注释:
要回答您对这种方法不灵活的疑问,我已经准备了以下输入文件。
$ cat input_comma.txt
abc,,,,5,,,3.2,,
,,,,,,def,
1,,,,,,1.2
6commas,,,,,,
7commas,,,,,,,
您可以看到,输入中存在多少个连续逗号都没关系:
$ sed 's/,,/,\N,/g;s/,,/,\N,/g;s/,,/,\N,/g' input_comma.txt
abc,N,N,N,5,N,N,3.2,N,
,N,N,N,N,N,def,
1,N,N,N,N,N,1.2
6commas,N,N,N,N,N,
7commas,N,N,N,N,N,N,
使用awk
,可以以相同的方式实现2个通过中的类似方法:
$ echo "test,,,mmm,,,,aa,," | awk '{gsub(/,,/,",\N,");gsub(/,,/,",\N,")} 1'
test,N,N,mmm,N,N,N,aa,N,
您可以尝试一次。
awk '{gsub(/,,/,",\N,");gsub(/,,/,",\N,")} 1' Input_file
with perl
:
perl -pe '1 while s/,,/,\N,/g'