2012-04-01 76 views

回答

5

这应该工作:

sed 's/\(\([^,]*,\)\{4\}[^,]*\),/\1\n/g' 

防爆充足的:

$ echo "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" | 
> sed 's/\(\([^,]*,\)\{4\}[^,]*\),/\1\n/g' 
1,2,3,4,5 
6,7,8,9,10 
11,12,13,14,15 
+0

请注意,这在OS X/Lion上不适用于我。我查看了其他地方发布的用于获得OS X回车的解决方案,并且他们在Lion上不适合我。 – 2012-04-02 05:00:35

+1

BSD sed与GNU sed有点不同。试试这个,它可以用于两种变体(我在Lion和Slackware上测试过):'echo“1,2,3,4,5,6,7,8,9,10,11,12,13,14, 15“| sed -e's/\(\([^,] *,\)\ {4 \} [^,] * \),/ \ 1 \'$'\ n/g'' - https:// cafenate .wordpress.com/2010/12/05 /换行符合的sed-ON-MAC / – 2012-04-02 14:10:10

1
$ echo -n 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 | xargs -d, printf '%d,%d,%d,%d,%d\n' 
1,2,3,4,5 
6,7,8,9,10 
11,12,13,14,15 
0
nawk -F, '{for(i=1;i<=NF;i++){printf("%s%s",$i,i%5?",":"\n")}}' file3 

测试:

pearl.246> nawk -F, '{for(i=1;i<=NF;i++){printf("%s%s",$i,i%5?",":"\n")}}' file3 
1,2,3,4,5 
6,7,8,9,10 
11,12,13,14,15 
pearl.247> 
1

接受的解决方案的工作原理,但过于复杂。尝试:

sed ':d s/,/\n/5; P; D; Td' 

并非所有的sed允许命令用分号隔开,所以你可能每个分号后需要字面换行符。另外,我不确定所有的sed都允许一个标签后跟一个命令,所以在s命令之前可能需要一个字面换行符。换句话说:

sed ':d 
s/,/\n/5 
P 
D 
Td'