Sed替换一定数量的事件

时间:2015-03-17 14:23:01

标签: sed

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

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

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

1 个答案:

答案 0 :(得分:2)

我能提供的最好的是

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

\U&技巧使用了空间的大写版本仍然是空格的事实;这是为了缩短重复次数。由于不再使用捕获,因此可以简化正则表达式。

在第二个s命令中,//是最近尝试的正则表达式的替身,所以第一个基本上是第二次执行(这次匹配最初的第二次)外观)。

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