我有这一行例如:
1,2,3,4,5,6,7,8,9,10
我想在第二次出现“,”时插入换行符(\ n)(用换行符替换第二行)。
答案 0 :(得分:9)
这可能适合你(GNU sed):
sed 's/,/\n/2;P;D' file
答案 1 :(得分:3)
如果我理解你正在尝试做的事情,那么
echo '1,2,3,4,5,6,7,8,9,10' | sed 's/\([^,]*,[^,]*\),/\1\n/g'
似乎是最直接的方式。 \([^,]*,[^,]*\)
将捕获1,2
,3,4
等,并且通过通常的s///g
替换它们之间的逗号。这将打印
1,2
3,4
5,6
7,8
9,10
答案 2 :(得分:2)
无法为冬季回答添加评论,但它不需要第一个,
部分,因为它必须让前一个字段以逗号分隔。
sed 's/\(,[^,]*\),/\1\n/g'
将使用相同的
此外,我还会添加另一种选择(尽管更糟糕,并留下一个尾随换行符)
echo "1,2,3,4,5,6,7,8,9,10" | xargs -d"," -n2 | tr ' ' ','
答案 3 :(得分:1)
我会用awk来做这件事:
$ awk -F, '{ for (i=1; i<=NF; ++i) printf "%s%s", $i, (i%2?FS:RS) }' file
1,2
3,4
5,6
7,8
9,10
它遍历每个字段,打印每个字段,然后打印字段分隔符(定义为逗号)或记录分隔符(换行符),具体取决于i%2
的值。
它比其他人提供的sed版本略长,虽然它的一个好处是你可以通过将2
更改为你喜欢的任何值来轻松改变每行的列数。
要避免在字段数不可分割的情况下在最后一个字段后面跟踪逗号,可以将三元组更改为i<NF&&i%2?FS:RS
。