繁体   English   中英

在循环中以大行替换每第n次出现

[英]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,23,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM