Shell脚本 - 将每5个逗号替换为换行符

4

如何将输入中每个第五个逗号替换为换行符?

例如:

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个回答

6
这应该能够工作:
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

请注意,在我的OS X/Lion上这不起作用。我查看了其他地方发布的解决方案,以在OS X上获得回车,但它们在Lion上对我无效。 - Nathan S.
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/newlines-in-sed-on-mac/ - Jake Petroules

1

接受的解决方案是可行的,但过于复杂。试试这个:

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

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

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

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

1

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接