[英]Replace every n'th occurrence in huge line in a loop
我有这一行例如:
1,2,3,4,5,6,7,8,9,10
我想在第二次出现“,”时插入一个换行符(\\ n)(用换行符替换第二个换行符)。
这可能适合你(GNU sed):
sed 's/,/\n/2;P;D' file
如果我理解你正在努力做的事,那么
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
到wintermutes回答,但它并不需要第一不能添加评论,
部分因为它必须有前场被逗号分隔。
sed 's/\(,[^,]*\),/\1\n/g'
将工作相同
此外,我将添加另一个替代方案(虽然更糟,留下一个尾随的换行符)
echo "1,2,3,4,5,6,7,8,9,10" | xargs -d"," -n2 | tr ' ' ','
我会用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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.