Sed 替换一定数量的事件

Sed to replace certain number of occurrences

我有下面的替换 sed 脚本,它适用于每行的第一次出现,但我试图让它适用于每行的前 2 次出现,而不是一个 (/1) 或整行 ( /g):

sed -r '2,$s/(^ *|, *)([a-z])/\U/1' 

有没有办法通过组合 sed 命令或创建脚本来做到这一点?

我能提供的最好的是

sed -r '2,$ { s/(^|,) *[a-z]/\U&/; s//\U&/; }'

\U& 技巧利用了 space 的大写版本仍然是 space 的事实;这是为了使重复更短。因为不再使用捕获,正则表达式可以稍微简化一下。

在第二个 s 命令中,// 是最近尝试的正则表达式的替代品,所以第一个实际上是第二次执行(这次匹配最初的内容第二次出现)。

由于 /1 实际上没有做任何事情(默认替换第一个出现的地方),我冒昧地删除了它。