如何将输入中每个第五个逗号替换为换行符?
例如:
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
接受的解决方案是可行的,但过于复杂。试试这个:
sed ':d s/,/\n/5; P; D; Td'
并非所有的sed都允许使用分号分隔命令,因此您可能需要在每个分号后面加上一个字面换行符。此外,我不确定所有的sed都允许标签后跟命令,因此在s命令之前可能需要一个字面换行符。换句话说:
sed ':d
s/,/\n/5
P
D
Td'
$ 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>
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