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

ocr*_*a88 3 linux awk grep sed

我有这一行例如:

1,2,3,4,5,6,7,8,9,10
Run Code Online (Sandbox Code Playgroud)

我想在第二次出现","时插入一个换行符(\n)(用换行符替换第二个换行符).

pot*_*ong 11

这可能适合你(GNU sed):

sed 's/,/\n/2;P;D' file
Run Code Online (Sandbox Code Playgroud)

  • 如果您可以添加解释其工作原理,那就太好了。谢谢 (2认同)
  • @Taavi`s /,/ \ n / 2`命令用换行符替换第二个`,`。“ P”命令可打印到模式空间中的第一行,包括第一行。D命令删除直到并包括第一个换行符,然后,如果模式空间不为空,则重复从第一个开始的所有sed命令,但不会像d命令那样由下一行替换模式空间。因此,模式空间将转换为多行,直到在引入下一行时将其完全消耗为止。 (2认同)

Win*_*ute 3

如果我明白你想要正确做什么,那么

echo '1,2,3,4,5,6,7,8,9,10' | sed 's/\([^,]*,[^,]*\),/\1\n/g'
Run Code Online (Sandbox Code Playgroud)

似乎是最直接的方法。\([^,]*,[^,]*\)将捕获1,2,3,4等,并且它们之间的逗号通过通常的 换行符替换s///g。这将打印

1,2
3,4
5,6
7,8
9,10
Run Code Online (Sandbox Code Playgroud)