如何在换行符中将每个第5个逗号替换为一个换行符?Shell脚本 - 用换行符替换每5个逗号
例如:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
成为
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
寻找使用类似sed
一个班轮...
如何在换行符中将每个第5个逗号替换为一个换行符?Shell脚本 - 用换行符替换每5个逗号
例如:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
成为
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
寻找使用类似sed
一个班轮...
这应该工作:
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
$ 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
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>
接受的解决方案的工作原理,但过于复杂。尝试:
sed ':d s/,/\n/5; P; D; Td'
并非所有的sed允许命令用分号隔开,所以你可能每个分号后需要字面换行符。另外,我不确定所有的sed都允许一个标签后跟一个命令,所以在s命令之前可能需要一个字面换行符。换句话说:
sed ':d
s/,/\n/5
P
D
Td'
请注意,这在OS X/Lion上不适用于我。我查看了其他地方发布的用于获得OS X回车的解决方案,并且他们在Lion上不适合我。 – 2012-04-02 05:00:35
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