需要在下面一行中的任意2个顺序逗号之间插入“ \ N”:
"abc,,,,5,,,3.2,,"
收件人:
"abc,\N,\N,\N,5,\N,\N,3.2,\N,"
此外,结果逗号的数量不是固定的,可能是6、7或更多。需要一种灵活的方式来处理它。
找不到来自Google的明确解决方案。
答案 0 :(得分:3)
您可以只使用以下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
会在字符串上全局地将,,
替换为,\N,
,但是您必须在模式空间上进行两次遍历,以确保在给定命令的情况下进行了所有替换: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
,可以以相同的方式在两遍中实现类似的方法:
$ echo "test,,,mmm,,,,aa,," | awk '{gsub(/\,\,/,",\\N,");gsub(/\,\,/,",\\N,")} 1'
test,\N,\N,mmm,\N,\N,\N,aa,\N,
答案 1 :(得分:3)
请您尝试一次。
awk '{gsub(/\,\,/,",\\N,");gsub(/\,\,/,",\\N,")} 1' Input_file
答案 2 :(得分:1)
使用perl
:
perl -pe '1 while s/,,/,\\N,/g'